루프에서 비동기 작업을 호출하고 병렬로 몇 번 실행하려고합니다.루프에서 비동기 작업 호출?
나는 각 목록에 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);
}
편집 :가
내가 대신 목록의 목록을 통해 모든 나는 다른 목록에 비동기 작업에 보낼 목록, 다음 루프를 추가하고 각 하나를 보내, 내 코드를 변경 시도 : 당신은 시간의 특정 기간에 대한 AsyncTask를 실행해야하는 경우
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
또한 - 제 코드는 큰 목록을 (각 10 개씩) 구분합니다. 큰 목록에 150 개의 항목이 있으면 15 개의 파트가 있으므로 15 개의 비동기 작업이 있습니다. 내가 대기열에 올 것이고, 단지 5 명이 한 번에 달릴 것이라고 읽는 것이 옳은가? – user3437721