您的位置:首页 > 移动开发 > Android开发

android AsyncTask简单使用

2016-09-06 00:00 337 查看
/**
* 第一个参数类型Boolean 为启动任务执行的输入参数,doInBackground方法传入
* 第二个参数类型Integer 为后台执行过程时参数输出,onProgressUpdate方法传入
* 第三个参数类型String 为最后输出返回的结果值,onPostExecute 方法传入
*/
private class TestAsyncTask extends AsyncTask<Boolean,Integer,String>{

private Context mContext;

public TestAsyncTask(Context context){
this.mContext = context;
}

private ProgressDialog dialog;
//2、运行完onPreExecute后执行,长时间的操作放在此方法内,
//此方法内不能操作UI
//返回结果值
@Override
protected String doInBackground(Boolean... strings) {
for(int i=0;i<100;i++){
this.publishProgress(i);//传参给onProgressUpdate 进行UI等操作,例如执行进度更新
}
return null;
}

//1、开始执行时运行
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(mContext,"提示","操作执行中....");
super.onPreExecute();
}

//3、执行完毕
@Override
protected void onPostExecute(String s) {
if(dialog.isShowing()){
dialog.dismiss();
}
super.onPostExecute(s);
}

//执行过程进行进度更新等操作
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}

//调用取消时,要做的操作
@Override
protected void onCancelled(String s) {
super.onCancelled(s);
}

//调用取消时,要做的操作
@Override
protected void onCancelled() {
super.onCancelled();
}
}

具体参数对应



方法调用:

AsyncTask必须在UI线程中实例化,通过excute()开始调用执行,调用也必须在UI线程中进行

每次实例化AsyncTask只能调用一次

新执行的Task时如果还存在其他tTask未执行完毕,新Task只会执行onPreExecute方法,等待前一个Task执行完毕才进行余下的方法。

如果想同时执行多个AsyncTask任务,调用时可通过new AsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)执行。

但是也是只能进行五个任务同时执行。

想同时执行更多个任务也可以新建ExecutorService来执行。

private static ExecutorService SINGLE_TASK_EXECUTOR;
private static ExecutorService LIMITED_TASK_EXECUTOR;
private static ExecutorService FULL_TASK_EXECUTOR;

static {
//
SINGLE_TASK_EXECUTOR = (ExecutorService) Executors.newSingleThreadExecutor();
//使用自定义的CorePoolSize为7
LIMITED_TASK_EXECUTOR = (ExecutorService) Executors.newFixedThreadPool(7);
//使用未设限制的Executor
FULL_TASK_EXECUTOR = (ExecutorService) Executors.newCachedThreadPool();
};
//执行
new TestAsyncTask().executeOnExecutor(LIMITED_TASK_EXECUTOR);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android AsyncTask