開啟服務(wù)有兩種方式:startService 和 bindService。
首先在 AndroidManifest.xml 文件中聲明
<service android:name=".MyService"/>
startService 方式
public class MyService extends Service {
private static String TAG = "MyService";
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, "onBind");
return null;
}
@Override
public void onCreate() {
Log.i(TAG, "onCreate");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i(TAG, "onDestroy");
super.onDestroy();
}
}
啟動服務(wù):
//開啟服務(wù)
Intent service = new Intent(this, MyService.class);
startService(service);
//結(jié)束服務(wù)
stopService(service);
開啟服務(wù)時,調(diào)用一次 startService(),生命周期執(zhí)行的方法依次是:onCreate() ==> onStartCommand();
調(diào)用多次 startService(),onCreate() 只有第一次會被執(zhí)行,而 onStartCommand() 會執(zhí)行多次。
bindService 方式
該方式需要一個 ServiceConnection 接口的實現(xiàn)類對象
MyServiceConnection.java:
public class MyServiceConnection implements ServiceConnection {
private static String TAG = "MyServiceConnection";
private MyService.MyBinder myBinder = null;
// 連接初始化
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder = (MyService.MyBinder) service;
myBinder.setMethod1('xxx');
}
// 方法1-自定義方法
public void setMethod1(String str) {
myBinder.setMethod1(str);
}
// 方法2
public void setMethod2() {
myBinder.setMethod2();
}
// 連接錯誤
@Override
public void onServiceDisconnected(ComponentName name) {
Log.e(TAG,"onServiceDisconnected");
}
}
MyService.java:
public class MyService extends Service {
private static String TAG = "MyService";
private MyBinder myBinder = new MyBinder();
@Override
public IBinder onBind(Intent intent) {
return myBinder;
}
@Override
public void onCreate() {
super.onCreate();
}
MainActivity _m = null;
Boolean screening = false;
public class MyBinder extends Binder {
public void setMethod1(String str) {
// 方法1執(zhí)行代碼
}
public void setMethod2() {
// 方法2執(zhí)行代碼
}
}
@Override
public void onDestroy() {
Log.i(TAG,"destroy");
super.onDestroy();
}
}
啟動服務(wù):
// 開啟服務(wù)
Intent intent = new Intent(this, MyService.class);
MyServiceConnection conn = new MyServiceConnection();
bindService(intent, conn, BIND_AUTO_CREATE);
// 關(guān)閉服務(wù)
unbindService(conn);
conn = null;
bindService 開啟服務(wù),生命周期執(zhí)行的方法依次是:
onCreate() ==> onBind() ==> onServiceConnected();
調(diào)用多次 bindService(),onCreate() 和 onBind() 都只在第一次會被執(zhí)行,onServiceConnected() 會執(zhí)行多次。