Thread、AsycTask、IntentService的比較

IntentService 是Serivce+handler的結合產物  AsyncTask是thread池+handler的結合產物 
爲什麼用service而不用thread:android 的系統機制有關,我們先拿 Thread 來說 Thread 的運行是獨立於 Activity 的,也就是說當一個 Activity 被 finish 之後 ,如果你沒有主動停止 Thread 或者 Thread 裏的 run 方法沒有執行完畢的話,Thread 也會一直執行。因此這裏會出現一個問題:當 Activity 被 finish 之後,你不再持有該 Thread 的引用。另一方面,你沒有辦法在不同的 Activity 中對同一 Thread 進行控制。
location serivce  不是一個單獨的進程,它和應用程序在同一個進程中。只能在當前應用中調用service。kill當前應用則service也隨之消亡。
remote service   獨立與應用程序之外進程的進程(必須在聲明的時候以android:process=":remote"方式聲明),配合AIDL可以實現進程間的相互調用。remote service所依附的那個應用如果應用kill掉,但是remoteservice還在運行,除非你卸載當前應用。 

選中你的進程com.example.android.intent_service然後點 stop,則應用被kill掉,而com.example.android.intent_service:remote卻安然無恙。

IntentService 是Serivce+handler的結合產物,可以在onHandleIntent直接處理耗時操作。而本地service和遠程service不能在onStart方法中執行耗時操作,只能放在子線程中進行處理,當有新的intent請求過來都會線onStartCommond將其入隊列,當第一個耗時操作結束後,就會處理下一個耗時操作(此時調用onHandleIntent),都執行完了自動執行onDestory銷燬IntengService服務。
AsyncTask是thread池+handler的結合產物,減少程序中線程過多開銷過大,操作和管理更加方便。AsyncTask實例必須在UI Thread中創建,execute方法必須在UI Thread中調用不能手動調用onPreExcute(),onPostExcute(Result)。task只能被執行一次,否則將出現異常。

數據簡單使用AsyncTask:實現代碼簡單, 數據量多且複雜使用handler+thread :相比較AsyncTask來說能更好的利用系統資源且高效

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章