3 回答

TA貢獻1893條經(jīng)驗 獲得超10個贊
我建議閱讀這篇文章,解釋意圖服務和工作意圖服務之間的區(qū)別。當我們第一次查看這些術語Service
時IntentService
,JobIntentService
它們看起來幾乎相似——以某種方式,它們會在后臺執(zhí)行一些操作(用戶不會注意到)。但是它們的操作方式幾乎沒有區(qū)別,
服務 - 這在調用此服務并執(zhí)行一些后臺操作的同一主線程上運行。對于主線程上發(fā)生的任何長時間運行的操作,建議創(chuàng)建一個新線程并
Handler
通過不影響主線程的性能來完成工作(例如;)。缺點:在主線程上運行
IntentService - Intent 服務還有助于執(zhí)行一些長時間運行(無限期)的后臺任務。唯一的區(qū)別是它創(chuàng)建了一個新線程來執(zhí)行這個任務,而不是在主線程上運行。給定的工作是否在它的
onHandleIntent
.缺點:當應用程序被殺死時,分配給 IntentService 的工作會丟失
JobIntentService - 工作意圖服務與 IntentService 非常相似,但沒有什么好處,例如應用程序可以隨時終止此工作,并且一旦應用程序重新創(chuàng)建/啟動,它就可以從頭開始工作。
但是從奧利奧,如果應用程序在后臺運行,則不允許在后臺啟動服務。Android 要求我們顯式地啟動服務,context.startForegroundService
而不是context.startService
當服務在 5 秒內啟動時,它必須與通知相關聯(lián),以便有一個與之關聯(lián)的 UI 元素。
參考:https : //developer.android.com/about/versions/oreo/background.html

TA貢獻1828條經(jīng)驗 獲得超6個贊
兩者的工作方式相同,但與 JobIntentService 的唯一區(qū)別是,如果應用程序在服務執(zhí)行時被終止,則 JobIntentService 會重新啟動。OnHandleWork() 在應用程序被殺死后重新啟動。

TA貢獻2003條經(jīng)驗 獲得超2個贊
基本上,兩者遵循相同的角色,不同之處在于 IntentService 它是 Service 的基類,它根據(jù)需要處理帶有 Intent 的顯式異步請求,它通過 startService 啟動(傳遞服務的 Intent ),因此該服務按照您的意愿啟動,從 Android Oreo JobIntentService 它也執(zhí)行工作處理,但是它能夠在舊版本中繼續(xù)運行,它也使過程更簡單。事實上,這 2 個 API 具有相同的后續(xù)功能。對于 Oreo 使用的工作的執(zhí)行,如果JobScheduler.enqueue
已經(jīng)在舊版本的平臺中,它將被使用Context.startService
添加回答
舉報