簡體   English   中英

取消多個asyncTask

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM