關於非同步任務

2021-08-26 10:41:37 字數 1760 閱讀 6425

packagetest.me.layout;

importandroid.os.asynctask;

importandroid.os.bundle;

importandroid.os.handler;

importandroid.os.message;

importandroid.os.systemclock;

importandroid.util.log;

importandroid.widget.textview;

importandroid.widget.toast;

/**乙個使用非同步任務的例子。一般來說乙個非同步任務只執行一次,這個例子有點非主流,任務結束後會觸發下一次任務執行。

*由任務task在螢幕上列印數字,第一次任務執行由主activity的oncreate觸發,每次任務結束後

*設定下一次觸發的時間,共執行5次。對於任務來說doinbackground()接收任務的引數params,並執行產生數字的動作,每乙個數字

*產生後呼叫一次publishprogress()來更新ui,這個函式本身也是非同步的只是用來發個訊息呼叫完成後立即返回,

*而產生數字的動作在繼續進行。更新介面的操作在onprogressupdate()中設定。

*所有的on函式都由系統呼叫,不能使用者呼叫。

***中使用handler是為了能觸發任務執行,android規定這種非同步任務每次執行完就結束,若要重新執行需要new乙個新的。

*非同步任務只能在ui執行緒裡面建立和執行*/

publicclasstestasyncextendsactivity

//接收任務task發來的訊息,觸發乙個新的任務

privatefinalhandlerhandler=newhandler()}};

//任務執行次數

privatestaticinttimes=1;

//asynctask<>的引數型別由使用者設定,這裡設為三個string

//第乙個string代表輸入到任務的引數型別,也即是doinbackground()的引數型別

//第二個string代表處理過程中的引數型別,也就是doinbackground()執行過程中的產出引數型別,通過publishprogress()發訊息

//傳遞給onprogressupdate()一般用來更新介面

//第三個string代表任務結束的產出型別,也就是doinbackground()的返回值型別,和onpostexecute()的引數型別

privateclasstaskextendsasynctask

return"任務結束";

}//任務執行結束後,在ui執行緒中被系統呼叫

//一般用來顯示任務已經執行結束

@override

protectedvoidonpostexecute(stringresult)

//設定下一次任務觸發時間

messagemsg=message.obtain();

msg.what=msg_timer;

handler.sendmessagedelayed(msg,10000l);

}//最先執行,在ui執行緒中被系統呼叫

//一般用來在ui中產生乙個進度條

@override

protectedvoidonpreexecute()

//更新介面操作,在收到更新訊息後,在ui執行緒中被系統呼叫

@override

protectedvoidonprogressupdate(string...values)}}

關於非同步任務

packagetest.me.layout importandroid.os.asynctask importandroid.os.bundle importandroid.os.handler importandroid.os.message importandroid.os.systemcloc...

非同步任務 關於非同步任務的設計探索(1)

開票員給客戶開通代收的業務,並且與客戶簽約 即簽訂代收協議 主管審核客戶的簽約業務,若拒絕,則開票人需要通知客戶修改資料重新提交 若同意,則簽約成功,流程結束。自己分析了一下之前的錯誤,發現雖然分析了整體的業務流程 角色的許可權與上下游,但沒有去分析這個任務是同步還是非同步的,導致與開發同學也吵了很...

非同步 非同步任務

非同步任務 記錄一下學習完springboot後進行使用非同步方法時的筆記 service層 author yesijie date 2019 11 29 15 25 service public class asyncc catch interruptedexception e system.ou...