Service 是Android四大组件之一,与Activity很相似。Service和Activity的主要区别在于前者没有界面,而后者人户看的见,且可以进行交互。开启服务一般有二种方法,startService() 和 BindService().区别就是:前者当用户按下Back键的时候Service 仍然在运行。而后者则跟Activity同时死亡。二者各有千秋,按实际需求选择不同的方式。
Service和Activity一样都有自己的生命周期。Service的生命周期方法有:
IBinder onBind(Intent intent) ——->此方法子类必须实现,返回的IBinder对象用来通信
void onCreate() ——>Service 刚刚创建的时候就调用
void onStartCommand()—->取代之前的onStart()方法。此方法写核心代码
boolean onUnbind() —-> 解绑
void onDestory() —->被关闭之前调用此方法
下面来简要讲一下Service的创建步骤
1)写个自己的服务类来继承Service
2 )在配置文件中注册
下面用绑定服务的方式并让Activity与之通信
第一步:布局三个按钮,分别是绑定Service ,解绑Service,获取Service的数据
第二步 在MainActivity中实现业务逻辑
package com.yu.myapplication;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
MyService.MyBinder binder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
ServiceConnection conn = new ServiceConnection() {
@Override
//
public void onServiceConnected(ComponentName name, IBinder service) {
//拿到Service类的对象
binder = (MyService.MyBinder) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
//绑定Service
public void bind(View view){
//第二个参数是ServiceConnection对象,当Activity与Serrvice绑定成功。
//自动创建:如果填入0,表示不创建
bindService(new Intent(MainActivity.this,MyService.class),conn,BIND_AUTO_CREATE);
}
//解绑
public void unbind(View view){
unbindService(conn);
}
//获取数据
public void status(View view){
//吐司,**+""转为字符串**
Toast.makeText(MainActivity.this,binder.getCount()+"",Toast.LENGTH_LONG).show();
}
}
//创建Service 类
package com.yu.myapplication;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
/**
* Created by Administrator on 2016/4/8.
*/
public class MyService extends Service {
private final String TAG = "MyService";
private Boolean isTrue=false ;
private int count = 0;
MyBinder myBinder = new MyBinder();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return myBinder;
}
public class MyBinder extends Binder {
public int getCount() {
return count;
}
}
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG, "------------>onCreate()");
new Thread() {
@Override
public void run() {
while (!isTrue) {
super.run();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
}
}
}.start();
}
@Override
public boolean onUnbind(Intent intent) {
Log.i(TAG, "------------> unbindService()");
return true;
}
@Override
public void onDestroy() {
isTrue = true;
Log.i(TAG, "------------> onDestroy() ");
super.onDestroy();
}
}
最后别忘了注册
<service android:name=".MyService"/>
注意:startService()时onCreate()只执行一次,但onStartCommand()会执行多次。BindService()系统只会调用Service的onBind()方法一次。