由於android中,涉及到ui介面的更新等,必須在主線程中執行,而很多時候,ui介面更新比較耗時,如果不使用非同步載入方式實現的話,很容易導致anr異常。出於安全考慮,一些耗時操作最好用非同步方式實現。
asynctask,是android提供的輕量級的非同步類,可以直接繼承asynctask,在類中實現非同步操作,並提供介面反饋當前非同步執行進度(可以通過介面實現ui進度更新),最後反饋執行的結果給ui主線程。
使用asynctask的優點是簡單快捷,缺點則是**相對臃腫,在多個任務同時執行時,不易對執行緒進行精確的控制。除了使用asynctask外,還可以使用handler來實現。比如我做的一些聯網獲取資料的操作,就是用timer+handler來實現的(由於使用的socket和伺服器互動,因此使用timer來定時,在規定的時間內不響應的話視為超時。)
乙個asynctask非同步任務的執行一般包括以下幾個步驟:
1.execute(params... params),執行乙個非同步任務,需要我們在**中呼叫此方法,觸發非同步任務的執行。
2.onpreexecute(),在execute(params... params)被呼叫後立即執行,一般用來在執行後台任務前對ui做一些標記。
3.doinbackground(params... params),在onpreexecute()完成後立即執行,用於執行較為費時的操作,此方法將接收輸入引數和返回計算結果。在執行過程中可以呼叫publishprogress(progress... values)來更新進度資訊。
4.onprogressupdate(progress... values),在呼叫publishprogress(progress... values)時,此方法被執行,直接將進度資訊更新到ui元件上。
5.onpostexecute(result result),當後台操作結束時,此方法將會被呼叫,計算結果將做為引數傳遞到此方法中,直接將結果顯示到ui元件上。
在使用asynctask的時候,有幾點需要格外注意:
1.非同步任務的例項必須在ui執行緒中建立。
2.execute(params... params)方法必須在ui執行緒中呼叫。
3.不要手動呼叫onpreexecute(),doinbackground(params... params),onprogressupdate(progress... values),onpostexecute(result result)這幾個方法。
4.不能在doinbackground(params... params)中更改ui元件的資訊。
5.乙個任務例項只能執行一次,如果執行第二次將會丟擲異常。
例如:public class firstasynctask extends asynctask
catch(exception ex)
return str;
}protected void onpostexecute(string result)
}使用的時候,只要新增以下**即可:
firstasynctask task=new firstasynctask();
task.execute("http://localhost:8088/***xx/yyyy.jsp");//此處新增對應的url即可。
Linux fastboot 用法學習歸納
最近一衝動就將 windows 系統給全部格式化掉了,完全地換上了 ubuntu 系統。不過好在是 windows 輕度使用者,加之原來工作也一般是在 ubuntu 的虛擬機器 伺服器中,所以過渡到 linux 環境下也並沒有多大的不適。最蛋疼的有三點,1 onenote 的缺失 只能用 web 版...
C nth element函式用法學習
nth element 需要標頭檔案。典型參數列為 nth element randomit first,randomit nth,randomit last,compare comp less nth element的作用就是根據nth這個引數,把容器內的元素分為2組,nth之前的都比它小,nth...
Typora基本用法學習
使用 空格進入一級標題,空格進入二級標題,以此類推。大於號 空格進入引用,同樣可進入多級引用。一二三四五 上山打老虎 老虎沒打到 是個二百五 表頭a 表頭b 表頭c 回車生成列表 例如 表頭a 表頭b表頭c 內容 例如 內容 斜體 內容 ex 內容 加粗 內容 ex 內容 斜體 加粗 內容 ex 內...