Service 不是運行在獨立的線程智政,所以不建議在Service中編寫耗時的邏輯和操作胎食,否則會引起ANR
IntentService
- 可用與執(zhí)行后臺耗時的任務(wù),任務(wù)執(zhí)行后會自動停止
- 具有高優(yōu)先級习贫,射核稿優(yōu)先級的后臺任務(wù)歉井,切不容易被后臺系統(tǒng)殺死送挑。
- 可以多次啟動绑莺,每個耗時操作都會以工作隊列的方式在IntentService的onHandlIntent回調(diào)方法中執(zhí)行。
上述三點源碼解析
IntentServic 繼承Service
- IntentService -> onCreate 創(chuàng)建了線程HandlerThread extend Thread惕耕,是個子線程纺裁。在這里面run 方法,Looper.prepare----Looper.looper
然后實例化 ServiceHandler extends Handler 并將子線程的looper傳入
回調(diào)方法handleMessage中司澎,先后調(diào)用了抽象方法「onHandleIntent(Intent)」, 緊接著下面執(zhí)行調(diào)用Service自身的「stopSelf(msg.arg1)」所以任務(wù)執(zhí)行后會停止
HandlerThread 子線程設(shè)置了優(yōu)先級THREAD_PRIORITY_DEFAULT = 0; 很高
在onStart-> 發(fā)送消息 ServiceHandler本質(zhì)是Handler
回調(diào)onHandlerIntent 執(zhí)行在子線程欺缘。所以本身是依靠Handler隊列機制的,因此會以工作隊列方式執(zhí)行挤安。