編輯:關於Android編程
Android中經常會有一些操作比如網絡請求,文件讀寫,數據庫操作,比較耗時,我們需要將其放在非UI線程去處理,此時,我們需要處理任務前後UI的變化和交互。我們需要通過類似js中異步請求處理,這裡總結我所了解到的,方便自己記憶,也方便別人的浏覽。
new AysncTask().execute();
AsyncTask會按照流程執行在UI線程和一個耗時的任務線程。
(1) onPreExecute() 執行預處理,它運行於UI線程,可以為後台任務做一些准備工作,比如繪制一個進度條控件。
(2) doInBackground(Params...) 後台進程執行的具體計算在這裡實現,doInBackground(Params...)是AsyncTask的關鍵,此方法必須重載。在這個方法內可以使用publishProgress(Progress...)改變當前的進度值。
(3)onProgressUpdate(Progress...) 運行於UI線程。如果在doInBackground(Params...) 中使用了publishProgress(Progress...),就會觸發這個方法。在這裡可以對進度條控件根據進度值做出具體的響應。
(4)onPostExecute(Result) 運行於UI線程,可以對後台任務的結果做出處理,結果就是doInBackground(Params...)的返回值。此方法也要經常重載,如果Result為null表明後台任務沒有完成(被取消或者出現異常)。
2. Handler
創建Handler時需要傳Lopper,默認是UI線程的。
通過Handler發送消息(Message)到主線程或者Handler的線程,
3. Activity.runOnUiThread(Runnable)
Runnable即可在UI線程執行
4. View.post(Runnable)
Runnable運行在UI線程
View.post(Runnable)方法。在post(Runnable action)方法裡,View獲得當前線程(即UI線程)的Handler,然後將action對象post到Handler裡。在Handler裡,它將傳遞過來的action對象包裝成一個Message(Message的callback為action),然後將其投入UI線程的消息循環中。在Handler再次處理該Message時,有一條分支(未解釋的那條)就是為它所設,直接調用runnable的run方法。而此時,已經路由到UI線程裡,因此,我們可以毫無顧慮的來更新UI。
基本上就這幾種方式,當然也可自己使用消息循環常見類似的任務處理機制。
csdn博客編輯器不好用,也不支持markdown,這個是從我個人博客搬過來的,歡迎光臨個人獨立博客!
原文地址:http://blog.isming.me/blog/2014/03/16/androidyi-bu-cao-zuo-zong-jie/ ,轉載請注明出處。
ListView是Android中常用的控件。什麼是列表視圖,讓我們先看看圖:最常見的例子就是各種菜單的下啦列表。要實現列表,需要完成三個要素:1.ListView 把所
微信指紋支付是目前微信為了進一步提升交易安全所推出的支付驗證手段,但也有很多用戶在使用中會發現很多小問題,比如手上出汗時,就不能順利驗證支付,小編就這個問題
三星Galaxy S6 Edge推出有一段時間了,受很多用戶的贊揚,不過再好的手機在使用的過程中也會出現一定的問題。比如數據連接問題,手機卡頓滯後問題,攝像
本文實例講述了Android不使用自定義布局情況下實現自定義通知欄圖標的方法。分享給大家供大家參考,具體如下:自定義通知欄圖標?不是很簡單麼。自定義布局都不在話下!是的,