Service用于后臺操作耗時任務(wù)。
就比如我們咋A界面下載東西時昼弟,總不能讓客戶一直處于A界面。當(dāng)用戶單擊跳轉(zhuǎn)界面時奕筐,這個時候就用到了我們的Service舱痘,讓下載進(jìn)入到后臺变骡。
service分為兩種啟動模式:
一丶startService();
二丶bindService();
startService();開啟服務(wù)方式,它只有App被殺死時才會被銷毀芭逝∷担或者手動調(diào)用 stopService();方法結(jié)束service。
startService();生命周期流程:
oncreate(只執(zhí)行一次)——onStartCommand(如果服務(wù)已存在旬盯,每次點擊開啟服務(wù)都會被執(zhí)行但并未開啟一個服務(wù)台妆,服務(wù)不存在則開啟服務(wù)。)——service運(yùn)行.....——(service手動調(diào)用停止或者App殺死)ondestroy(只執(zhí)行一次)胖翰。
startService(Intent)開啟時需要參數(shù)Intent??
解綁時調(diào)用stopService(intent);
bindService();開啟服務(wù)模式接剩,當(dāng)前Activity被finish()的話此服務(wù)會被銷毀∨萏或者手動調(diào)用unbindService();關(guān)閉服務(wù)搂漠。
bindService();生命周期流程:
oncreate(只執(zhí)行一次)——onBind(只執(zhí)行一次,接收第一次創(chuàng)建Service時接收Activity傳過來的參數(shù))—service運(yùn)行中....—onUnBind(調(diào)用unbindService()解綁時或者當(dāng)前activity被finish()時執(zhí)行)——ondestroy(只執(zhí)行一次)某弦。
bindService(intent,serviceConnection, Service.BIND_AUTO_CREATE);啟動時需要三個參數(shù)
在使用bindService()啟動時我們需要在繼承Service的類里構(gòu)造內(nèi)部類桐汤,內(nèi)部類繼承Binder(Binder實現(xiàn)了IBinder)。靶壮。在onBind里return new出我們的內(nèi)部類對象怔毛,同時我們Activity向service傳遞的值也是在onBind方法里獲取到的。
IntentService:
它本身就是運(yùn)行在子線程中的,可直接做耗時操作墩划。
創(chuàng)建類繼承IntentService
生命周期:oncreate()——onHandleIntent()——onDestroy()
oncreate:如果當(dāng)前已存在此服務(wù)就不會去走涕刚。調(diào)用????stopService()后再startService()走此周期
onHandleIntent:此生命周期可多次運(yùn)行,但他會等你這次耗時操作完成后才會執(zhí)行乙帮。當(dāng)耗時操作在執(zhí)行過程中調(diào)用了stopService()會走onDestroy()但是他會堅持吧耗時操作執(zhí)行完杜漠。
onDestroy:等操作完成后會自已走此方法。自動銷毀。
比如咱們模仿一個耗時操作在onHandleIntent方法:
for (int i =0; i <20; i++) {
try {
Thread.sleep(500);
Log.e("IntentService","i==" + i);
}catch (InterruptedException e) {
e.printStackTrace();
}
}