標籤:android os 使用 ar 問題 cti 代碼 on c
一、為瞭解決新線程不能更新UI組件的問題,Android提供了如下幾種解決方案。
1)使用Handler實現線程之間的通訊;
2)Activity.runOnUiThread(Runnable);
3)View.post(Runnable);
4)View.postDelayed(Runnable,long).
二、AsyncTask適用於簡單的非同步處理,不需要藉助線程和Handler即可實現。AsyncTask<Params,Progress,Result>是一個抽象類別,通常用於被繼承,繼承AsyncTask時需要指定如下三個泛型參數。
1)Params:啟動任務執行的輸入參數類型
2)Progress:背景工作完成的進度值的類型
3)Result:後台執行任務完成後返回結果的類型
三、實現AsyncTask實現步驟:
1)建立AsyncTask的子類,並為三個泛型參數指定類型。如果某個泛型參數不需要指定類型,可將它指定為Void。
2)根據需要,實現AsyncTask的如下方法:
(1)doInBackground(Params...):重寫該方法是後台線程將要完成的任務。該方法可以調用publishProgress(Progress... values)方法更新任務的執行進度。
(2)onProgressUpdate(Progress.. values):在doInBackground()方法中調用publishProgress()方法更新任務的執行進度後,將會觸發該方法。
(3)onPreExecute():該方法將在執行後台耗時操作前被調用。通常該方法用於完成一些初始化的準備工作,比如在介面上顯示進度條等。
(4)onPostExecute(Result result):當doInBackground()完成後,系統會自動調用0nPostExecute()方法,並將doInbackground()方法的傳回值傳給該方法。
3)調用AsyncTask子類的執行個體的execute(Params... params)開始執行耗時任務。
四、使用AsyncTask時必須遵守如下規則:
1)必須在UI線程中建立AsyncTask的執行個體。
2)必須在UI線程中調用AsyncTask的execute()方法。
3)AsyncTask的onPreExecute()、onPostExecute(Result result)、doInBackground(Params...)、onProgressUpdate(Progress.. values)方法,不應該由程式員代碼調用,而是由Android系統負責調用。
4)每個AsyncTask只能被執行一次,多次調用將會引發異常。
AsyncTask(非同步任務)