我的AsyncTask
中有Activity
,当用户点击按钮时,我开始AsyncTask
:
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.btnLogin:
if(task==null){
task=new LoginTask(this);
task.execute();
}
break;
}
}
但是,如果用户在任务完成后单击按钮,我希望它再次执行。我该怎么做才能做到这一点?我应该在每次用户点击按钮时创建新任务吗?如果任务已在运行,是否可以创建新实例? 此外,任务是静态内部类,以便处理屏幕旋转。
答案 0 :(得分:1)
您可以使用executeOnExecutor()
Executor
上执行AsyncTask
现在默认情况下,线程池并行运行:
从DONUT开始,这已经改变了 允许多个的线程池 任务并行运作。后 蜂巢,计划改变 这回到单个线程来避免 常见的应用程序错误
要确保线程以串行方式运行,请使用:SERIAL_EXECUTOR
。
答案 1 :(得分:1)
将任务声明为类变量。在AsyncTask的postExecute中使其为null。可能你已经完成了
答案 2 :(得分:0)
如果您希望它仅在先前的实例已经完成时运行,那么您可以使用AsyncTask.getStatus(),仅在状态为AsyncTask.Status.FINISHED时才启动新任务。
答案 3 :(得分:0)
不要同时运行它。制作Asynctasks的队列并一个接一个地运行。