非同步任務AsyncTask

2021-07-22 04:50:59 字數 1425 閱讀 9661

強調!!!以下只是我個人看法,如有錯誤的地方請文明指出

為避免主線程失去響應問題,android建議將耗時操作放在新的執行緒中,但是新的執行緒可能需要動態的更新ui元件,比如需要從網上獲取乙個網頁,讓後在textview上將其源**顯示出來,此時就要連線網路、獲取網路資料的操作放在新執行緒中完成。問題是獲取網路資料後,新執行緒不允許直接更新ui元件,有如下解決方法:

1、使用handler實現執行緒之間的通訊。

2、activity.runonuithread(runnable).

3、view.post(runnable).

4、view.postdelayed(runnable,long).

後三種較繁瑣,但是非同步任務則可以進一步簡化這種操作。它不需要借助執行緒和handler即可實現。

public

abstract

class

asynctask

非同步任務的執行原理:

注意事項:

關於取消任務cancel(true)

在取消任務時 如果任務正在執行(doinbackground()方法正在執行)時取消 不會影響 doinbackground方法的執行

只是不會呼叫dopostexecute()方法而已 ,而且就算呼叫了publishprogress方法 onprogressupdate也不會執行了,

所以 不是真正的取消操作 ,只是取消了 在ui主線程的操作,不呼叫onpostexecute()和onprogressupdate()方法;

正確取消姿勢:在doinbackground中加判斷**

if(iscancelled())

取消任務的**:

if(myasync != null && myasync.getstatus() == asynctask.status.running)

總之,使用非同步任務只要三步即可:

1、建立asynctask的子類,並為三個泛型引數指定型別。如果某個泛型引數不需要指定型別,則可將它指定為void。

2、根據需要實現asynctask的方法。

AsyncTask非同步任務

asynctask非同步任務怎麼寫 寫乙個類繼承asynctask,重寫方法 doinbackgroud 再new 這個類,執行物件 execute 在ui執行緒裡面寫這個類的實現方法 doinbackground有可能是新開的執行緒,有可能是執行緒池裡面的執行緒 執行順序 onpreexecute...

非同步任務(AsyncTask)

一 解決新執行緒無法更新ui組建問題的方案 為了解決新執行緒不能更新ui組建的問題,andorid提供了如下幾種解決方案 1.使用handler實現執行緒之間的通訊。mhandler new handler public class mythread extends thread 2.activit...

AsyncTask非同步任務

android中實現非同步機制的方法有兩種,handler和asynctask。handler在使用時,需要新開闢乙個執行緒,在任務完成以後,通過sendmessage 等方法通知ui執行緒進行介面更新。相比起handler,asynctask顯得更加簡單,內部封裝了執行緒池 執行緒和handler...