一弦撩、Service兩種啟動方式區(qū)別艇潭,
1坑填、startService和bindService方式生命周期函數(shù)不同。
onCreate()方法虹蒋,在startService或者bindService方式首次啟動時都會調(diào)用
onStartCommand()糜芳,bindeServce方式啟動不調(diào)用,在starService方式啟動時調(diào)用魄衅,不管service是否已處于開啟狀態(tài)每次都調(diào)用峭竣,返回值參數(shù)決定服務(wù)在被系統(tǒng)kill掉之后的恢復(fù)狀況,返回值為START_NO_STICKY時晃虫,不主動恢復(fù)皆撩,START_STICKY主動恢復(fù),Intent值不保存哲银,START_REDELIVER_INTENT主動恢復(fù)毅访,并主動傳入啟動service時傳入的Intent參數(shù)沮榜。
onBinde(),onUnbind()盘榨,在bindService方式啟動時調(diào)用喻粹,starService方式啟動不調(diào)用;
onDestory()草巡,服務(wù)不再使用且將會銷毀時調(diào)用守呜,兩種啟動方式都會調(diào)用。
2山憨、starService之后查乒,Service一直運行,除非被調(diào)用stopService或者自身調(diào)用stopSelf停止郁竟,client端與Service端無關(guān)聯(lián)玛迄,不能調(diào)用服務(wù)內(nèi)的方法,bindService方式啟動棚亩,所有綁定改服務(wù)的客戶端unBind之后蓖议,服務(wù)會銷毀,client端可拿到service實例調(diào)用其方法讥蟆。
二勒虾、線程與servie區(qū)別,IntentService
Thread是執(zhí)行耗時操作的瘸彤,service設(shè)計用來執(zhí)行的后臺任務(wù)的修然,所謂后臺任務(wù)是指與UI無關(guān)的任務(wù),其運行還是在主線程质况,跑耗時的任務(wù)還是要開線程來執(zhí)行愕宋。
IntentService包含了一個后臺線程跑耗時任務(wù),當任務(wù)執(zhí)行完后结榄,IntentService 會自動停止中贝,不需要我們?nèi)ナ謩咏Y(jié)束。如果啟動 IntentService 多次潭陪,那么每一個耗時操作會以工作隊列的方式在 IntentService 的 onHandleIntent 回調(diào)方法中執(zhí)行雄妥,依次去執(zhí)行,使用串行的方式依溯,執(zhí)行完自動結(jié)束老厌。