繼承關(guān)系
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比濟(jì)寧網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式濟(jì)寧網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋濟(jì)寧地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
Context -> ContextWrapper -> Service 位于 android.app 包中
Service的生命周期
Service啟動(dòng)
1.StartService 同一個(gè)Service Start多次,onCreate()執(zhí)行一次,onStartCommand()執(zhí)行多次
2.BindService 同一個(gè)Service bind多次, onCreate()執(zhí)行一次,onBind()也執(zhí)行一次
注意:
1.啟動(dòng)也分隱式和顯式.但考慮到安全等因數(shù),如果不是也許需求 一般我們使用顯示的調(diào)用方式。
2.onStartCommand(Intent intent, int flags, int startId)
onStartCommand有4種返回值
START_STICKY:如果service進(jìn)程被kill掉,保留service的狀態(tài)為開(kāi)始狀態(tài),但不保留遞送的intent對(duì)象。隨后系統(tǒng)會(huì)嘗試重新創(chuàng)建service,由于服務(wù)狀態(tài)為開(kāi)始狀態(tài),所以創(chuàng)建服務(wù)后一定會(huì)調(diào)用onStartCommand(Intent,int,int)方法。如果在此期間沒(méi)有任何啟動(dòng)命令被傳遞到service,那么參數(shù)Intent將為null。
START_NOT_STICKY:“非粘性的”。使用這個(gè)返回值時(shí),如果在執(zhí)行完onStartCommand后,服務(wù)被異常kill掉,系統(tǒng)不會(huì)自動(dòng)重啟該服務(wù)。
START_REDELIVER_INTENT:重傳Intent。使用這個(gè)返回值時(shí),如果在執(zhí)行完onStartCommand后,服務(wù)被異常kill掉,系統(tǒng)會(huì)自動(dòng)重啟該服務(wù),并將Intent的值傳入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保證服務(wù)被kill后一定能重啟。
3.BindService例代碼
Service部分
private BindServiceX myBinderServiceX=new BindServiceX();
public class BindServiceX extends Binder{
public BindService getBindService() {
return BindService.this;
}
}
@Override
public IBinder onBind(Intent arg0) {
// 此處返回自定義Binder
return myBinderServiceX;
}
組件調(diào)用部分(以Activity為例)
Intent intentBind = new Intent(AndroidServiceActivity.this, BindService.class);
bindService(intentBind,
new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//Service對(duì)外提供Bind
BindServiceX bindServiceX = (BindServiceX) service;
//通過(guò)bind提供的方法得到Service引用
BindService bindService = bindServiceX.getBindService();
//todo 接下來(lái)可以和Service通信了
}
};
, Context.BIND_AUTO_CREATE);
Service關(guān)閉
1.stopSelf();
2.stopSelfResult();
3.stopService()
注意:
1.同時(shí)使用 startService 與 bindService 要注意到,Service 的終止,需要unbindService與stopService同時(shí)調(diào)用(調(diào)用順序無(wú)所謂),才能終止 Service.
2.Service哪種方式啟動(dòng)必須調(diào)用與之對(duì)應(yīng)方法才會(huì)關(guān)閉Service。