Android AsyncTask非同步任務

2021-06-18 23:16:20 字數 4679 閱讀 4414

asynctask能夠適當地、簡單地用於 ui執行緒。這個類准許執行後台操作,讓那些沒有熟練操作執行緒的操作者在 ui執行緒上發布結果。

非同步任務的定義是乙個在後台執行緒上執行,其結果是在 ui執行緒上發表的計算。

非同步任務被定義成三種一般型別: params, progress和 result;四步: begin ,doinbackground , processprogress 和end.

用法:aysnctask必須被繼承成子集應用。子類至少 override乙個方法 (doinbackground(params...)),最多經常 override另乙個(onpostexecute(result))。

子類例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

privateclassdownloadfilestaskextendsasynctask

returntotalsize;

}

protectedvoidonprogressupdate(integer... progress)

protectedvoidonpostexecute(long result)

}

一旦建立,乙個任務執行起來就非常簡單:

new downloadfilestask().execute(url1, url2, url3);

asynctask 的一般型別 :

這三個型別被用於乙個非同步任務,如下:

1.params,當執行時,引數型別傳送到任務

2.progress,在後台計算期間,執行緒單位型別被發布

3.result,後台計算的結果型別

在乙個非同步任務裡,不是所有的型別總被用。假如乙個型別不被使用,可以簡單地適用 void型別:

[code]private class mytask extends asynctask[/code]

四步曲:

當乙個非同步任務被執行,這個任務要完成四步:

1.onpreexecute(),任務被執行之後,立刻呼叫 ui執行緒。這步通常被用於設定任務,例如在使用者介面顯示乙個進度條。

2.doinbackground(params...), onpreexecute()完成執行,立刻呼叫後台執行緒,這步被用於執行較長時間的後台計算。非同步任務的引數也被傳到這步。計算的結果必須在這步返回,將傳回到上一步。

3.onprogressupdate(progress...),一次呼叫 publishprogress(progress...)後呼叫 ui執行緒,執行的時機沒有定義。這個方法用於在使用者介面顯示進度,當後台計算還在進行時。例如:這個方法可以被用於乙個進度條動畫或在文字域顯示日誌。

4.onpostexecute(result), 當後台計算結束時,呼叫 ui執行緒。後台計算結果作為乙個引數傳遞到這步。

執行緒規則:

有一些執行緒規則必須去遵守,這個類才會正確的工作:

*任務例項必須建立在 ui執行緒

* execute(params...)必須在 ui執行緒上呼叫

*不要手動呼叫 onpreexecute(), onpostexecute(result), doinbackground(params...), onprogressupdate(progress...)

*任務會執行僅一次(假如有第二個嘗試去執行,將丟擲乙個異常)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

publicclassdoubleextendsactivity

publicvoidinitprogress()

pbar.setprogress(30);

//這裡可以做一些初始化工作,我就不麻煩寫了,寫幾個**的for迴圈算了

for(inti =0; i <100; i++)

pbar.setprogress(60);

//這裡可以做一些初始化工作,我就不麻煩寫了,寫幾個**的for迴圈算了

for(inti =0; i <100; i++)

pbar.setprogress(100);

intent intent =newintent(double.this, double2.class);

intent.setflags(intent.flag_activity_clear_top);

startactivity(intent);

finish();

}

//繼承於asynctask

classasyncloaderextendsasynctask

}

}

android AsyncTask非同步任務

asynctask params 啟動任務執行的輸入引數型別 progress 後台任務完成的進度值型別 result 後台執行任務完成後返回結果的型別 使用asynctask只要如下三步即可 doinbackground params。重寫該方法就是後台執行緒將要完成的任務,該方法可以呼叫publ...

Android AsyncTask非同步任務

asynctask是乙個抽象類 params執行任務要輸入的引數的型別 url等等 progress後台完成任務進度值的型別,result後台任務結束返回結果的型別 一般在主線程中定義這個內部類 共享元件等等 實現這個類要自定義類繼承它,終點重寫四個方法 1.doinbackground 耗時任務執...

redis crontab php非同步處理任務

2016年1月8日 16 08 43 星期五 情景 使用者登入日誌,發郵件,發簡訊等等實時性要求不怎麼高的業務通常會非同步執行 之前接觸過幾種redis crontab配套的實現方法,比如 crontab定時執行curl指令碼 1.用curl 訪問url執行php指令碼去pop佇列 2.php程式p...