[英]cancel multi 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
可以輕松調用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.cancel(true);
它只會取消我引用的最后一個asyncTask,而我將無法取消其他任何asyncTask
期望的最后一個
您可以改用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();
}
如果希望創建大量要跟蹤的AsyncTask,則需要將它們存儲在可以跟蹤的Array中,例如:
List<AsyncTask> myList = new ArrayList<>();
每次啟動AsyncTask時,只需將其添加到數組中
myList.add(myNewAsyncTask);
現在,如果您想取消特定的AsyncTask,則需要調用:
myList.get(asyncTaskPosition).cancel(true);
上面是能夠跟蹤和取消AsyncTasks列表中的AsyncTask的主要指令。
關於屏幕旋轉,例如,重新創建了保存List的活動,這意味着您將丟失Array的實例,有充分的文獻記載的方法可以通過以下鏈接中的片段保留該實例:
https://developer.android.com/guide/topics/resources/runtime-changes.html
以恢復的方式,您將需要使用setRetainInstance(true)
設置的片段,即使在旋轉更改時,該片段也將保留片段實例及其所有變量,並允許您存儲數組而不會丟失實例。 從那里開始,它就是純Java邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.