天天看點

AsyncTask VS Thread+Handler

很多網友可能發現Android平台很多應用使用的都是AsyncTask,而并非Thread和Handler去更新UI,這裡 Taodoor給大家說下他們到底有什麼差別,我們平時應該使用哪種解決方案。從Android 1.5開始系統将AsyncTask引入到android.os包中,過去在很早1.1和1.0 SDK時其實官方将其命名為UserTask,其内部是JDK 1.5開始新增的concurrent庫,做過J2EE的網友可能明白并發庫效率和強大性,比Java原始的Thread更靈活和強大,但對于輕量級的使 用更為占用系統資源。Thread是Java早期為實作多線程而設計的,比較簡單不支援concurrent中很多特性在同步和線程池類中需要自己去實作 很多的東西,對于分布式應用來說更需要自己寫排程代碼,而為了Android UI的重新整理Google引入了Handler和Looper機制,它們均基于消息實作,有事可能消息隊列阻塞或其他原因無法準确的使用。

Android開發網推薦大家使用AsyncTask代替Thread+Handler的方式,不僅調用上更為簡單,經過實測更可靠一 些,Google在Browser中大量使用了異步任務作為處理耗時的I/O操作,比如下載下傳檔案、讀寫資料庫等等,它們在本質上都離不開消息,但是 AsyncTask相比Thread加Handler更為可靠,更易于維護,但AsyncTask缺點也是有的比如一旦線程開啟即 dobackground方法執行後無法給線程發送消息,僅能通過預先設定好的标記來控制邏輯,當然可以通過線程的挂起等待标志位的改變來通訊,對于某些 應用Thread和Handler以及Looper可能更靈活。

轉自:http://www.android123.com.cn/androidkaifa/624.html

繼續閱讀