[英]Threading in Android
我目前正在開發Android應用程序,它需要從互聯網下載內容。 我使用線程來執行該操作,然后調用runOnUiThread方法來更新GUI。
我不是為每個刷新操作啟動一個新線程,而是為所有后台下載工作創建一個單獨的線程,循環和下載隊列中排列的內容。 這可確保您不會同時下載內容並節省資源。
在GUI中,您只需在用戶提示時排隊刷新請求,並可以通過在http方法實例上調用HttpRequestBase.abort
來中止正在運行的下載。 后台線程應該接收並捕獲SocketException
並繼續執行下一個排隊請求。
要結束后台線程,您只需結束其循環。 您可以使用Looper
和Handler
類來幫助您完成上述所有操作,您提到的HandlerThread
類只是一個方便的類來創建一個具有Looper
的線程。
interrupt
線程的問題在於它不會使您脫離阻塞I / O請求並且正確處理InterruptException
可能會很復雜。 所以根據情況,我會說是,最好通過從run
方法返回來結束線程。
我發現本周AsyncTask,我在我的程序中的某個地方用AsyncTask替換了Thread,
你在這里有doc和sample,非常好用:
http://developer.android.com/reference/android/os/AsyncTask.html
當我使用線程GUI是鎖定,現在它沒有鎖定。
並且可以取消AsyncTask(但我從不嘗試)
您可以使用IntentService來啟動后台操作,該服務將作為“工作隊列處理器”運行,並將按順序執行您的調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.