service的啟動(dòng)方式有兩種:
startService():生命周期 startService()---onCreate()---onStartConmom()---onDestroy();
這種方式啟動(dòng)的話,需要注意一下幾個(gè)問題:
1.:當(dāng)我們通過startService被調(diào)用以后,多次在調(diào)用startService(),onCreate()方法也只會(huì)被調(diào)用一次,而onStartConmon()
會(huì)被多次調(diào)用當(dāng)我們調(diào)用stopService()的時(shí)候,onDestroy()就會(huì)被調(diào)用,從而銷毀服務(wù)。
2.當(dāng)我們通過 startService啟動(dòng)時(shí)候,通過intent傳值,在onStartConmon()方法中獲取值的時(shí)候,一定要先判斷intent是否為 null。
bindService():生命周期 bindService()---onCreate()---onBind()---unBind()---onDestroy();
bindService()這種方式進(jìn)行啟動(dòng)service好處是更加便利activity中操作service,比如加入service中有幾個(gè)方法,a,b ,如果要在
activity中調(diào)用,在需要在activity獲取ServiceConnection對(duì)象,通過ServiceConnection來獲取service中內(nèi)部類的類對(duì)象,然后通過這個(gè)類對(duì)象就可以調(diào)用類中的方法,當(dāng)然這個(gè)類需要繼承Binder對(duì)象。
`private MyBindService service;
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
MyBindService.MyBinder myBinder = (MyBindService.MyBinder) binder;
service = myBinder.getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("Kathy", "ActivityA - onServiceDisconnected");
}
};`
下面代碼是service的類部類
public class MyBinder extends Binder { public MyBindService getService() { return MyBindService.this; } }
bindService的特點(diǎn)
(1)每次調(diào)用服務(wù)必須首先bindService,執(zhí)行unbindService后不能調(diào)用;
(2)服務(wù)的生命周期受限于UI線程。一旦應(yīng)用(Activity)終止,服務(wù)將onDestory銷毀;
(3)可以在綁定后調(diào)用服務(wù)里的功能。
混合調(diào)用(須按順序操作):
(1)首先在主界面創(chuàng)建時(shí),startService(intent)啟動(dòng)方式開啟服務(wù),保證服務(wù)長期后臺(tái)運(yùn)行;
(2)然后調(diào)用服務(wù)時(shí),bindService(intent, connection, BIND_AUTO_CREATE)綁定方式綁定服務(wù),這樣可
以調(diào)用服務(wù)的方法;
(3)調(diào)用服務(wù)功能結(jié)束后,unbindService(connection)解除綁定服務(wù),置空中介對(duì)象;
(4)最后不再需要服務(wù)時(shí),stopService(intent)終止服務(wù)。