11、参数说明
public class MyAsyncTask extends AsyncTask<String,Void,String> {
}
1) Params
在执行AsyncTask时需要传入的参数,也是doInBackground()的参数。
2) Progress
后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位,是onProgressUpdate()的参数类型。
3) Result
是执行完耗时操作后返回的结果,即doInBackground()返回的结果,也是onPostExecute()的参数类型。
2、方法说明
public class MyAsyncTask extends AsyncTask<String,Integer,String> {
/**
* 这个方法会在后台任务开始执行之间调用,用于进行一些界面上的初始化操作,比如显示一个进度条对话框等。
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
}
/**
* 执行耗时操作的地方,要使用asyncTask就必须重写该方法,注意该方法中不能更新UI
* @param strings
* @return
*/
@Override
protected String doInBackground(String... strings) {
return null;
}
/**
*执行完耗时操作后执行该方法
* @param s doInBackground返回值
*/
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// publishProgress();
}
/**
*当在后台任务中调用了publishProgress(Progress...)方法后,这个方法就很快会被调用,在这个方法中可以对UI进行操作,利用参数中的数值就可以对界面元素进行相应的更新。
* @param values
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
}
执行任务时只需
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute("");
注意:
1、AsyncTask对象必须在主线程创建;execute方法需要在UI线程调用;一个AsyncTask对象只能调用一次
2、当一个App旋转时,整个Activity会被销毁和重建。当Activity重启时,AsyncTask中对该Activity的引用是无效的,因此onPostExecute()就不会起作用,若AsynTask正在执行,折会报 view not attached to window manager 异常
3、同样也是生命周期的问题,在 Activity的onDestory()方法中调用Asyntask.cancal方法,让二者的生命周期同步
4、为了避免AsyncTask内存泄漏,AsyncTask尽量使用静态内部类