Android開發實踐:多線程編程小結

來源:互聯網
上載者:User

標籤:android   thread   handler   asynctask   線程   

我們知道,Android系統為了提高程式的即時響應能力,不允許在UI線程中進行耗時的操作,否則會出現ANR異常,因此必須將耗時的任務放到非UI線程中執行。Android/Java提供了很多類來協助大家完成非同步作業,比如:Thread類,Timer類,AsyncTask類,HandlerThread類,以及Executor介面。這些類都分別在什麼場合下使用呢?


本文簡單地總結一下Android開發中常見的多線程類型和解決方案,並比較和分析了各個方案的區別,以便更好地理解和應用這些API介面。


1. 單項非同步任務


[情境]:下載一個APK檔案,拷貝一個大檔案。


[方案]:Thread類,AsyncTask類


[比較]:


AsyncTask提供了onProgressUpdate和onPostExecute通知調用者任務執行的進度和結果,在函數內可以直接執行UI操作。


而Thread中不能直接操作UI介面,而要通過Activity.runOnUiThread或者藉助Handler來完成UI的更新。


所以Thread更適合執行一些不需要跟UI頻繁互動的單項任務,而AsyncTask相反。



2. 定時/迴圈執行的任務


[情境]:定時重新整理UI(如:秒錶),保持TCP心跳串連。


[方案]:“Thread + sleep”,定時器Timer


[比較]:


“Thread + sleep” 方案樣本:


new Thread(new Runnable() {    @Override    public void run() {while(!EXIT) {    Thread.sleep(1000);            mListener.onTimeArrived();}    }}).start();


兩者都不能在迴圈中執行UI更新操作,而必須藉助Activity.runOnUiThread或者Handler來完成UI的更新。


由於Thread方案中onTimeArrived()佔用了部分時間,所以這種方案的定時並不準確,而Timer是由系統建立非同步通知的定時器,會更加準確,所以推薦使用Timer來完成定時任務。


3. 背景工作執行緒


背景工作執行緒啟動後處於一種等待“命令”/“訊息”的休眠狀態,當接收到“命令”/“訊息”後,將它放入“命令”/“訊息”隊列,然後喚醒線程依次串列或者並存執行。


[情境]:“生產者--消費者”模式,TCP Server端命令處理常式


[方案]: “Thread + condition/lock” ,HandlerThread類,線程池Executor


[比較]:


HandlerThread類是Android系統提供了封裝好了Loop迴圈的Thread類,可以更加便捷地完成CallerThread和WorkThread的命令/訊息互動。當然,我們也可以用Thread和Condition/Lock方式實現同樣的效果,只不過要自己實現更多的代碼。


前面的兩種方式,都是“串列”的方式在執行“命令”,如果希望提供並發性,同時開啟和管理多個線程來執行任務,則可以考慮使用Executor。


以上就是我對Android多線程編程的簡單小結,文中有任何不清楚或者不正確的地方,歡迎留言或者來信[email protected]交流討論。


本文出自 “對影成三人” 部落格,請務必保留此出處http://ticktick.blog.51cto.com/823160/1564055

Android開發實踐:多線程編程小結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.