Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android異步操作總結

Android異步操作總結

編輯:關於Android編程

Android中經常會有一些操作比如網絡請求,文件讀寫,數據庫操作,比較耗時,我們需要將其放在非UI線程去處理,此時,我們需要處理任務前後UI的變化和交互。我們需要通過類似js中異步請求處理,這裡總結我所了解到的,方便自己記憶,也方便別人的浏覽。

    AsyncTask

    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。

    所有的異步操作原理本質都是通過Handler

    基本上就這幾種方式,當然也可自己使用消息循環常見類似的任務處理機制。

    csdn博客編輯器不好用,也不支持markdown,這個是從我個人博客搬過來的,歡迎光臨個人獨立博客!

    原文地址:http://blog.isming.me/blog/2014/03/16/androidyi-bu-cao-zuo-zong-jie/ ,轉載請注明出處。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved