編輯:關於Android編程
結構
繼承關系
public abstract class AsyncTask extends Object
java.lang.Object
android.os.AsyncTask
類概述
AsyncTask能夠適當地、簡單地用於 UI線程。 這個類不需要操作線程(Thread)就可以完成後台操作將結果返回UI。
異步任務的定義是一個在後台線程上運行,其結果是在 UI線程上發布的計算。 異步任務被定義成三種泛型類型: Params,Progress和 Result;和四個步驟: begin ,doInBackground,processProgress 和end。
用法
AysncTask必須被繼承使用。子類至少覆蓋一個方法 (doInBackground(Params...)),最經常覆蓋另一個(onPostExecute(Result).)下面是一個子類的例子:
一旦創建,一個任務執行起來就非常簡單:
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHAgYWxpZ249"left">AsyncTask的泛型類型
這三個類型被用於一個異步任務,如下:
1. Params,啟動任務執行的輸入參數
2. Progress,後台任務執行的百分比
3. Result,後台計算的結果類型
在一個異步任務裡,不是所有的類型總被用。假如一個類型不被使用,可以簡單地使用 Void類型:
4個步驟
當一個異步任務被執行,任務經過四各步驟:
1.onPreExecute(),在UI線程上調用任務後立即執行。這步通常被用於設置任務,例如在用戶界面顯示一個進度條。
2.doInBackground(Params...),後台線程執行onPreExecute()完後立即調用,這步被用於執行較長時間的後台計算。異步任務的參數也被傳到這步。計算的結果必須在這步返回,將傳回到上一步。在執行過程中可以調用publishProgress(Progress...)來更新任務的進度。
3.onProgressUpdate(Progress...),一次呼叫 publishProgress(Progress...)後調用 UI線程。執行時間是不確定的。這個方法用於當後台計算還在進行時在用戶界面顯示進度。例如:這個方法可以被用於一個進度條動畫或在文本域顯示記錄。
4.onPostExecute(Result), 當後台計算結束時,調用 UI線程。後台計算結果作為一個參數傳遞到這步。
線程規則
有一些線程規則必須去遵守,這個類才會正確的工作:
· 任務實例必須創建在 UI線程
· execute(Params...)必須在 UI線程上調用
· 不要手動調用onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)
· 這個任務只執行一次(如果執行第二次將會拋出異常)
內部類
enum AsyncTask.Status
表示任務的當前狀態
構造函數
public AsyncTask ()
創建一個新的異步任務。這個構造函數必須在UI線程上調用。
公共方法
public final boolean cancel (boolean mayInterruptIfRunning)
嘗試取消這個任務的執行,如果這個任務已經結束或者已經取消或者不能被取消或者某些其他原因,那麼將導致這個操作失敗,當調用此方法時,此方法執行成功並且這個任務還沒有執行,那麼此任務將不再執行。如果任務已經開始,這時執行此操作傳入的參數mayInterruptIfRunning為true,執行此任務的線程將嘗試中斷該任務。
參數
mayInterruptIfRunning 如果為true則正在執行的線程將會中斷,如果false,則會允許正在執行的任務線程執行完畢。
返回值
如果此任務不能取消返回false,如果已經正常的執行完畢,返回true
參見
isCancelled()
onCancelled()
public final AsyncTask
用指定的參數來執行此任務,這個方法將會返回此任務本身,所以調用者可以擁有此任務的引用。此方法必須在UI線程中調用
參數
params 任務參數
返回值
AsyncTask的實例
異常
IllegalStateException 如果getStatus()返回的是RUNNING或者FINISHED
public final Result get ()
等待計算結束並返回結果
返回值
計算結果
異常
CancellationException 如果計算取消
ExecutionException 如果計算拋出異常
InterruptedException 當等待時當前線程拋出異常
public final Result get (long timeout, TimeUnit unit)
等待計算結束並返回結果,最長等待時間為:timeOut(超時時間).
參數
timeout 計算等待超時時間
unit 超時的時間單位
返回值
計算結果
異常
CancellationException 如果計算取消
ExecutionException 如果計算拋出異常
InterruptedException 當等待時當前線程拋出異常
TimeoutException 等待時間超時
public final AsyncTask.Status getStatus ()
獲得任務的當前狀態
返回值
當前狀態
public final boolean isCancelled ()
如果在任務正常結束之前取消任務成功則返回true,否則返回false
返回值
如果任務正常結束之前取消任務成功返回true。
參見
cancel(boolean)
受保護方法
protected abstract Result doInBackground (Params... params)
覆蓋此方法在後台線程執行計算,此方法中的參數是此任務的execute(Params...)方法的調用這傳遞的參數,此方法可以調用
publishProgress(Progress...)在
UI線程中來更新數據
參數
params 此任務的參數
返回值
返回一個由此任務子類定義的結果 Result
參見
onPreExecute()
onPostExecute(Result)
publishProgress(Progress...)
protected void onCancelled ()
此方法在UI線程中當cancel(boolean) 被調用後調用
參見
cancel(boolean)
isCancelled()
protected void onPostExecute (Result result)
此方法在UI線程中doInBackground(Params...)。方法調用之後調用,此方法中的參數的值是doInBackground(Params...)的返回值或者當此任務已經被取消或有異常發生時此參數值為空
null
參數
result 由doInBackground(Params...)計算出的操作的結果。
參見
onPreExecute()
doInBackground(Params...)
protected void onPreExecute ()
在方法doInBackground(Params...)調用之前調用
參見
onPostExecute(Result)
doInBackground(Params...)
protected void onProgressUpdate (Progress... values)
該方法在UI線程中publishProgress(Progress...)被調用之後調用,該方法中的參數
values是已經被傳遞到
ppublishProgress(Progress...)中的參數
參數
values 進度表示值
參見
publishProgress(Progress...)
doInBackground(Params...)
protected final void publishProgress (Progress... values)
當調用doInBackground(Params...)在後台執行計算時會調用該方法,每當在UI線程中調用此方法時將觸發onProgressUpdate(Progress...)方法的執行
參數
values 將進度值更新到UI
參見
onProgressUpdate(Progress...)
doInBackground(Params...)
Android Studio 中使用OpenCV所遇到問題 一、關於如何生成.h文件網上查了很多資料,大部分都是說需要切換到build/intermediate
1.git的介紹git是一種項目版本控制工具,公司開發一般多用git,或者svn進行代碼托管,最近,因為項目涉及到多人合作開發,所以趁著有空分享一下經驗,以免各位走彎路。
前面我們介紹了AlertDialog和幾個常用的Dialog,ProgressDialog進度條提示框、DatePickerDialog日期選擇對話框和TimePicke
還是先來看看是不是你想要的效果:不廢話,直接上代碼,很簡單,代碼裡都有注釋1 單選public class SingleActivity extends AppCompa