在開發Android應用程序時必須遵守單線程模型的原則,尤其是開發有網絡交互功能的應用,Android UI線程主要用來控制控件和觸屏的操作。在單線程模型中必須要遵行兩條原則:
1、 不要阻塞UI線程;
2、 確保只在UI線程中訪問Android UI工具包
當一個程序第一次啟動時,Android會同時啟動一個對應的主線程(Main Thread),主線程主要負責處理與UI相關的時間,例如:用戶的按鍵事件,用戶接觸屏幕的事件,用戶接觸屏幕的事件以及屏幕繪圖事件,並把相關的事件分發到對應的組件進行處理。所以主線程通常又被叫做UI線程。
--------------------------------------分割線 --------------------------------------
Android異步下載圖片並且緩存圖片到本地 http://www.linuxidc.com/Linux/2014-04/100444.htm
Android異步任務(AsyncTask)的設計思想 http://www.linuxidc.com/Linux/2014-02/97104.htm
Android 異步加載圖片分析 http://www.linuxidc.com/Linux/2013-06/85369.htm
Android 中加載網絡資源時的優化 緩存和異步機制 http://www.linuxidc.com/Linux/2013-06/85364.htm
Android短彩信幻燈片異步加載機制 http://www.linuxidc.com/Linux/2013-03/81528.htm
Android-自定義TextView和異步加載圖片的實現 http://www.linuxidc.com/Linux/2012-12/76331.htm
--------------------------------------分割線 --------------------------------------
AsyncTask其實是Android開發包提供的一個工具類,它使創建需要與用戶界面交互的長時間運行的任務變得更簡單。相對來說AsyncTask更輕量級一些,適用於簡單的異步處理,不需要借助線程和Handler即可實現。
AsyncTask是抽象類,它定義了三種泛型類型,即AsyncTask中有三個參數(例如class MyTask extends AsyncTask<參數1 , 參數2 ,參數3>{}):
參數1:向後台任務的執行方法傳遞參數的類型;
參數2:在後台任務執行過程中,要求主UI線程處理中間狀態,通常是一些UI處理中傳遞的參數類型;
參數3:後台任務執行完返回時的參數類型。
其中參數1和參數2是一個泛型參數,即可變數組參數,例如String…,相當於String[]。傳參數時可傳可不傳,傳的話可以使一個個並列地傳,也可以直接是一個數組。
AsyncTask的執行分為四個步驟,每一步都對應一個回調方法,這些方法不應該有程序調用,開發者需要重寫這些方法:
1、 實例化AsyncTask:
MyTask task = new MyTask(this);
2、實現AsyncTask中定義的如下方法,下面是按照執行順序列出的:
1)、onPreExecute():運行於UI線程,該方法將在執行實際的後台操作前被調用。可以在該方法中做一些准備工作,例如在界面上顯示一個進度條反映當前任務執行的進度;
2)、doInBackground(Params…):該方法運行在後台線程中,主要負責執行那些很耗時的後台計算下載工作,也是使用AsyncTask必須重寫的一個方法。我們可以在其中調用publishProgress方法來更新任務的進度。
3)、onProgressUpdate(Progress…):運行於UI線程,在publishProgress方法被調用後執行,將任務進度顯示在界面上;
4)、onPostExecute():運行於UI線程,顧名思義,該方法在doInBackground執行完後,後台的計算結果將通過該方法傳遞到UI線程;
5)、onCancelled():運行於UI線程,該方法也可以不重寫,主要用來當用戶按取消按鈕後,退出後台任務使用。
為了正確的使用AsyncTask類,以下是幾條必須遵守的准則:
1、 Task的實例化必須在UI線程中創建;
2、 Execute方法必須在UI線程中調用;
3、 不要手動調用onPreExecute()、onPostExecute(Result)、doInBackground(Params…)、onProgressUpdate(Progress)這幾個方法;
4、 該Task只能被執行一次,否則多次調用時將會出現異常
注意:Task只能被執行一次,也就是說只能調用一次Task.execute()方法,如果想再次調用,必須重新實例化這個類。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-05/102297p2.htm
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2014年資料/5月/26日/Android異步操作----AsyncTask類
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm