AsyncTask重复运行报错的解决办法。
接着这节课老师讲的内容,因为AsyncTask只可以运行一次,如果你在AsyncTask运行中再次点击START按钮的话,也会引发一个崩溃报错(如图)
Cannot execute task: the task is already running.
翻译过来的意思是:无法执行任务,任务已经在运行中。
这就是在AsyncTask运行中,又点击了一次START的结果,很明显,AsyncTask任务只可以被运行一次,老师在这节课里没有讲过这个问题,不过也有其它的解决办法,我本来开始是想着Android Studio提供了某种办法,可以让一个按钮不被二次点击,然后去百度了一下,但没有找到类似的方法,所以,既然不能点两次,那就干脆只让点一次就好了。
解决办法:
1、当点击了mStart按钮的时候,将这个按钮设置为不可点击状态。
2、当点击了mStop按钮的时候,将mStart按钮设置为可点击状态。
略略略……强行禁止点击2次开始按钮!
//启动异步任务类
mStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mProgressTask.isCancelled()){
mProgressTask=new ProgressTask();
}
mProgressTask.execute();
mStart.setEnabled(false);//设置为不可点击按钮
}
});
//打断异步任务类
mStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProgressTask.cancel(true);
mStart.setEnabled(true);//将开始按钮设置为可点击状态
}
});
点击开始按钮以后:
点击结束按钮以后:
您需要创建 AsyncTask 的构造函数以将当前 Activity 上下文传递为:
public Context ctx;
public Your_AsyncTask_Class_Name (Context context){
super();
this.ctx=context;
}
......
@Override
protected void onPostExecute(final String result)
{
MainActivity.mProgressDialogDownload.dismiss();
PreMainActivity.ENABLE_RESTART = true;
final Intent i = new Intent(ctx, PreMainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
}
从 Activity 中,您可以将上下文传递为:
AsyncTask_Class_Name asyktaskobj=new AsyncTask_Class_Name(this);
asyktaskobj.execute();
转自https://class.m.imooc.com/qadetail?qid=285308