AsyncTask的基础讲解
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//異步任務AsyncTask,只能執(zhí)行一次,在一個線程里面不能多次執(zhí)行
//耗時操作(網(wǎng)絡,數(shù)據(jù)庫操作)一般用子線程,UI界面能夠改變,Handler操作,Message
new ExamAsyncTask().execute(1,2,3);//括號里面的參數(shù)給doInBackground()
//new ExamAsyncTask().cancel(true);//調(diào)用onCancelled這個方法
}
//實現(xiàn)一個自己的異步任務類(要寫封裝類):
//<>里面的三個類,都是對應的參數(shù)類型
//參數(shù)一:要給doInBackground的變量類型,
//參數(shù)二,執(zhí)行過程中onProgressUpdate要用的參數(shù)類型,此參數(shù)是publishProgress(這里面調(diào)用),
//參數(shù)三,結果給onPostExecute要用的參數(shù)的類型
class ExamAsyncTask extends AsyncTask<Integer, String, Double>{//Params,Progress,Result
//準備執(zhí)行前調(diào)用
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.i("2", "準備執(zhí)行任務");
}
//耗時操作
@Override
protected Double doInBackground(Integer... params) {
Log.i("我的參數(shù)1", params[0]+"");
Log.i("我的參數(shù)2", params[1]+"");
Log.i("我的參數(shù)3", params[2]+"");
publishProgress("a","b","c");//調(diào)用onProgressUpdate更新界面
Log.i("3", "耗時操作");
return 100.0;
}
//更新界面UI
@Override
protected void onProgressUpdate(String... values) {//values[0]就是"abc"
super.onProgressUpdate(values);
Log.i("values[0]", values[0]);
Log.i("values[1]", values[1]);
Log.i("values[2]", values[2]);
Log.i("4", "更新界面");
}
//任務執(zhí)行完成后調(diào)用
@Override
protected void onPostExecute(Double result) {
super.onPostExecute(result);
Log.i("5", "任務完成");
Log.i("resut", ""+result);//打印出100
}
//任務取消時調(diào)用
@Override
protected void onCancelled() {
super.onCancelled();
Log.i("6", "取消任務");
}
}
}
?
使用AsyncTask類,以下是幾條必須遵守的準則:
Task的實例必須在UI thread中創(chuàng)建;
execute方法必須在UI thread中調(diào)用;
不要手動的調(diào)用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)這幾個方法;
該task只能被執(zhí)行一次,否則多次調(diào)用時將會出現(xiàn)異常;
總結
以上是生活随笔為你收集整理的AsyncTask的基础讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF/MVVM 快速开发
- 下一篇: 常见的http状态码