取消多个asyncTask

时间:2018-02-09 14:12:34

标签: java android android-asynctask

这是我的代码示例

MyAsyncTask asyncTask1, asyncTask2, asyncTask3, asyncTask4, asyncTask5;

asyncTask1 = new MyAsyncTask(0);
asyncTask1.execute();
asyncTask2 = new MyAsyncTask(0);
asyncTask2.execute();
asyncTask3 = new MyAsyncTask(0);
asyncTask3.execute();
asyncTask4 = new MyAsyncTask(0); 
asyncTask4.execute();
asyncTask5 = new MyAsyncTask(0); 
asyncTask5.execute();

现在,如果我想取消任何像asyncTask2那样易于调用的AsyncTask asyncTask2.cancel(true);

但我不知道我运行这个AsyncTask mabye 1000次,所以我不能定义1000 MyAsyncTask asyncTask1000;能够取消任何AsyncTask

这个例子将解释更多

private MyAsyncTask asyncTask;

在这里它可能被称为循环或其他任何东西的100次

for(int i = 0; i< 30; i++){

asyncTask = new MyAsyncTask(0);
asyncTask.execute();

}

现在,如果我像这样asyncTask.cancel(true);运行取消 它将仅取消最后的asyncTask我引用它 我将无法取消任何其他asyncTask期待的最后一个

2 个答案:

答案 0 :(得分:0)

您可以使用1000 asyncTasks

的数组

例如:

MyAsyncTask[] taskArray = new MyAsyncTask[1000]
for (int i = 0; i < 1000; i++) {
    taskArray[i] = new MyAsyncTask(0);
    taskArray[i].execute();
}

然后在你要取消所有这些的情况下,再次使用取消来运行for循环。

for (int i = 0; i < 1000; i++) {
    taskArray[i].cancel();
}

答案 1 :(得分:0)

如果您希望创建大量AsyncTasks,则需要将它们存储在可以跟踪的数组中,例如:

// This stored procedure returns a result set and has one input parameter.
@NamedStoredProcedureQuery(
    name = "ReadAddressById",
    resultClasses = Address.class,
    procedureName = "READ_ADDRESS",
    parameters = {
        @StoredProcedureParameter(mode=javax.persistence.ParameterMode.IN, name="P_ADDRESS_ID", type=Long.class)
    }
)
@Entity
public class Address {
  ...
}

每次启动AsyncTask时,只需将其添加到数组

即可
List<AsyncTask> myList = new ArrayList<>();

现在,如果您想取消特定的AsyncTask,您需要致电:

myList.add(myNewAsyncTask);

以上是能够在AsyncTasks列表中跟踪和取消AsyncTask的主要指令。

关于屏幕旋转,例如,重新创建持有List的活动,这意味着您将丢失数组的实例,有一个记录良好的方法来保持实例通过您可以在以下链接:

https://developer.android.com/guide/topics/resources/runtime-changes.html

以恢复的方式,您将需要一个您将使用myList.get(asyncTaskPosition).cancel(true); 设置的片段,该片段将保留片段实例及其所有变量,即使在旋转更改时也将允许您存储阵列而不用有失去它的风险的例子。从那里,它的纯java逻辑。