写了个小demo进行学习。
public class MainActivity extends AppCompatActivity {
private TextView tv;
private int sum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
Integer[] num = {1,2,3,4,1,1,1,1,1,1};//传入AsyncTask的数组
/**
* AsyncTask中的三个参数
* 1.传入的参数,在execute方法中传入,最终传到doInBackground来使用。
* 2.监听异步的变化的值,是异步线程中publishProgress传给onProgressUpdate的值。
* 3.doInBackground返回的值,传给了onPostExecute。
*/
new AsyncTask<Integer,String,String>(){
/**
* 在主线程中执行
* 在doInBackground方法执行之前执行该方法,做一些预处理的工作
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
showLog("onPreExecute");
}
/**
* 在线程池中执行
* 异步操作写在此处
* @param params 通过execute方法传入的值
* @return 返回值给onPostExecute来进行主线程的UI操作
*/
@Override
protected String doInBackground(Integer... params) {
showLog("doInBackground");
for (int i = 0;i < 10; i++){
try {
Thread.sleep(3000);
publishProgress("value = " + i);//调用onProgressUpdate的前提条件方法。
showLog("run " + i + params[i]);
sum += params[i].intValue();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "result = " + sum;
}
/**
* 在主线程中执行
* 在doInBackground方法执行之后执行该方法
* 用于在主线程中进行UI操作
* @param result doInBackground返回的结果
*/
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
showLog("onPostExecute");
}
/**
* 在主线程中执行
* 在调用publishProgress方法后以下方法会执行
* @param values publishProgress中传入的值
*/
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
showLog("onProgressUpdate");
tv.setText(values[0]);
}
}.execute(num);//execute中传入的是数组,就是说异步任务可以用于多个值
}
private void showLog(String msg){
Log.e("uding",msg);
}
}