AsyncTask的使用及引數、方法的介紹
阿新 • • 發佈:2019-02-15
在安卓開發的時候,為了避免OOM問題或者提高程式執行速度,一般不會在主執行緒中做耗時的操作。因此當有需要做耗時操作的時候,都會開啟一個子執行緒,通過handler來獲取資料後更新UI,而Android給我們提供了一個類AsyncTask,可以看做是 thread+handler的結合。
AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以通過介面實現UI進度更新),最後反饋執行的結果給UI主執行緒。
關於AsyncTask的幾個方法和引數具體看程式碼中註釋:
關於進度的更新,在執行doInBackground方法時可以使用 publishProgress(result)方法把進度傳遞出去,在onProgressUpdate方法中接收,之後在UI中顯示出來。public void start(View view){ //第一個引數是doInbackground回撥中傳入的引數 //第二個引數是進度,onProgressUpdate的引數型別 //第三個引數是:doInbackground返回值型別,onPostExecute傳入的引數型別 new AsyncTask<Integer, Integer, Integer >() { @Override protected void onPreExecure(){ //放在主執行緒中,準備執行前的回撥,呼叫這個方法後才呼叫doInBackground } @Override protected Void doInBackground(Integer... params) { // doInBackground 是子執行緒執行耗時的操作 return result; } @Override protected void onProgressUpdate(Integer[] values) { //主執行緒中執行,進度改變時的回撥 }; @Override protected void onPostExecute(Void result){ //放在主執行緒中,執行完成的回撥,doInBackground結束後呼叫這個方法 } }.execute(0,100); }