2016-08-12 25 views
6

我想請有人解釋一下,HandlerThread和IntentService之間的主要區別是什麼,以及主要的用例場景是什麼?HandlerThread vs IntentService

據我所知,HandlerThread包含一個Looper,管理由Handler提供的messageQueue。據我所知,你可以將任務推給HandlerThread並執行。使用nonUI相關的長時間運行操作非常棒,您可以通過runOnUiThread()將結果推送回UI。

相比之下,IntentService適用於長時間運行,與非UI相關的操作,可以在它調用selfStop()關閉自己完成的作業完成時按順序執行任務。如果一個IntentService正在處理一個任務,當一個新的請求到達時,它將添加到隊列中並處理第二個,當它完成第一個。

從我的角度來看,他們以同樣的方式完成同樣的工作。假設我有一個應用程序,其中用戶按一個按鈕,我開始下載一個文件。如果用戶多次點擊,則新任務正在排隊,僅當第一個完成時啓動第二個任務。 我應該使用什麼? IntentService或HandlerThread?

回答

5

所以,過程中同時進行HandlerThread和IntentService的源代碼後,我發現:

  • IntentServie內部有一個HandlerThread實例(這是分離的工作線程)
  • IntentService調用selfStop( )在執行onHandleIntent()方法後關閉自身(因爲它擴展了服務類)。
  • IntentService是從Service類本身擴展而來的,所以如果你願意的話,你可以根據需要在一個獨立的進程中啓動它。

IntentService onCreate()方法,創建工作線程:

@Override 
public void onCreate() { 
    super.onCreate(); 
    HandlerThread thread = new HandlerThread("IntentService[" + mName + "]"); 
    thread.start(); 
    mServiceLooper = thread.getLooper(); 
    mServiceHandler = new ServiceHandler(mServiceLooper); 
} 

IntentService自己的處理程序,殺服務所需的工作完成後:

private final class ServiceHandler extends Handler { 
    public ServiceHandler(Looper looper) { 
     super(looper); 
    } 

    @Override 
    public void handleMessage(Message msg) { 
     onHandleIntent((Intent)msg.obj); 
     stopSelf(msg.arg1); 
    } 
} 

在我的閱讀IntentService是HandlerThread和Service的組合。

歡迎任何進一步的答案和解決方案!