我想在一個循環中調用一個異步任務並且並行執行幾次。在循環中調用異步任務?
我有一個項目列表,我分成了更小的列表,每個列表中有10個項目。 然後,對於每個小型列表,我使用THREAD_POOL_EXECUTOR執行異步任務。
問題是,它不工作。我在想它,因爲每次傳遞給AsyncTask時都使用相同的列表 - 我認爲它可能作爲參考傳遞。
我是否需要以某種方式動態創建新列表?
//split the ListItems into 10s
if (actualThumbs.size() > 10){
List<List<ListItem>> parts = chopped(actualThumbs, 10); // this splits it into parts of 10
List<ListItem> listToSend = new ArrayList<ListItem>(); //this is the list to pass
for(int i = 0; i < parts.size(); i++){ //for every part
for(int x = 0; x < parts.get(i).size(); x++){ //for everything in that part
//add to its own List
listToSend.add(parts.get(i).get(x));
}
//this is the async task
loadActualThumbs thumbs = new loadActualThumbs();
//execute multiple threads
thumbs.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,listToSend);
listToSend.clear(); //clearing the list ready for a new one - PROBLEM?
}
}
else
{
//else just execute AsyncTask normally, this works OK
loadActualThumbs thumbs = new loadActualThumbs();
thumbs.execute(actualThumbs);
}
編輯:
我試圖改變我的代碼,而不是通過列出的清單中添加,我想發送到異步任務到另一個任務列表中的每個列表,然後循環和發送的每一個:
if (actualThumbs.size() > 10){
List<List<ListItem>> parts = chopped(actualThumbs, 10);
List<ListItem> listToSend = new ArrayList<ListItem>();
List<List<ListItem>> sendMe = new ArrayList<List<ListItem>>();
for(int i = 0; i < parts.size(); i++){ //for every part
for(int x = 0; x < parts.get(i).size(); x++){ //for everything in that part
//add to its own ListItem?
listToSend.add(parts.get(i).get(x));
}
sendMe.add(listToSend);// add the List to this List
listToSend.clear();
}
for(int e = 0; e<sendMe.size();e++){ //loop through the list of lists
loadActualThumbs thumbs = new loadActualThumbs();
//execute multiple threads?
thumbs.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,sendMe.get(e)); // execute async with correct List
}
}
else
{
if (actualThumbs.size() > 0){
//load actual thumbnails
loadActualThumbs thumbs = new loadActualThumbs();
thumbs.execute(actualThumbs);
}
}
thumbs.executeOnE xecutor(AsyncTask.THREAD_POOL_EXECUTOR,parts.get(i)); – ElDuderino
非常聰明!它的驚人之處在於我們如何能夠想到事物它似乎現在工作,雖然我不知道爲什麼它不是以我的方式工作。請回復,以便我可以標記爲答案! – user3437721
另外 - 因爲我的代碼將BIG列表分成多個部分(各10個)。如果大列表包含150個項目,則會有15個部分,因此會有15個異步任務。我是否正確地閱讀他們將排隊,並且一次只能運行5個? – user3437721