1. 程式人生 > >Service中是否可以執行耗時操作

Service中是否可以執行耗時操作

不可以。

Service和activity是執行在當前app所在的main thread(UI主執行緒)中的,而耗時操作(如:網路請求、拷貝資料、大檔案)會阻塞主執行緒,給使用者不好的體驗。


Broadcase耗時操作為10秒,Activity耗時操作為5秒
Service耗時操作為20秒



如果需要在服務中進行耗時操作,可以選擇IntentService,  IntentService是Service的子類,用來處理非同步請求。

IntentService在onCreate()方法中通過HandlerThread單獨開啟一個執行緒來處理Intent請求物件所對應的任務,這樣可以避免事務處理阻塞主執行緒。
onHandleIntent()函式針對Intent的不同進行不同的事務處理就可以,執行完一個Intent請求物件所對應的工作之後,如果沒有新的Intent請求達到,則自動停止Service; 否則ServiceHandler會取得下一個Intent請求
傳入該函式來處理其所對應的任務。