強調!!!以下只是我個人看法,如有錯誤的地方請文明指出
為避免主線程失去響應問題,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...