service的啟動方式有兩種:
startService():生命周期 startService()---onCreate()---onStartConmom()---onDestroy();
這種方式啟動的話捂敌,需要注意一下幾個問題:
1.:當我們通過startService被調(diào)用以后挚歧,多次在調(diào)用startService(),onCreate()方法也只會被調(diào)用一次穗泵,而onStartConmon()
會被多次調(diào)用當我們調(diào)用stopService()的時候坊秸,onDestroy()就會被調(diào)用,從而銷毀服務选脊。
2.當我們通過 startService啟動時候杭抠,通過intent傳值,在onStartConmon()方法中獲取值的時候恳啥,一定要先判斷intent是否為 null偏灿。
bindService():生命周期 bindService()---onCreate()---onBind()---unBind()---onDestroy();
bindService()這種方式進行啟動service好處是更加便利activity中操作service,比如加入service中有幾個方法钝的,a,b 翁垂,如果要在
activity中調(diào)用,在需要在activity獲取ServiceConnection對象硝桩,通過ServiceConnection來獲取service中內(nèi)部類的類對象沿猜,然后通過這個類對象就可以調(diào)用類中的方法,當然這個類需要繼承Binder對象碗脊。
`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的特點
(1)每次調(diào)用服務必須首先bindService啼肩,執(zhí)行unbindService后不能調(diào)用;
(2)服務的生命周期受限于UI線程衙伶。一旦應用(Activity)終止祈坠,服務將onDestory銷毀;
(3)可以在綁定后調(diào)用服務里的功能矢劲。
混合調(diào)用(須按順序操作):
(1)首先在主界面創(chuàng)建時颁虐,startService(intent)啟動方式開啟服務,保證服務長期后臺運行卧须;
(2)然后調(diào)用服務時,bindService(intent, connection, BIND_AUTO_CREATE)綁定方式綁定服務,這樣可
以調(diào)用服務的方法花嘶;
(3)調(diào)用服務功能結(jié)束后笋籽,unbindService(connection)解除綁定服務,置空中介對象椭员;
(4)最后不再需要服務時车海,stopService(intent)終止服務。