사용자가 필터링 할 이미지를 요청하면 새 스레드를 생성하는 응용 프로그램이 있습니다.간단한 스레드 관리 - Java - Android
이것은 내가 가지고있는 유일한 유형의 작업이며 모든 것이 똑같이 중요합니다.
너무 많은 동시 스레드 (최대 9 개까지)를 요청하면 스레드 관리자는 RejectedExecutionException을 발생시킵니다.
내가하는 일은 분당합니다.
// Manage Concurrent Tasks
private Queue<AsyncTask<Bitmap,Integer,Integer>> tasks = new LinkedList<AsyncTask<Bitmap,Integer,Integer>>();
@Override
public int remainingSize() {
return tasks.size();
}
@Override
public void addTask(AsyncTask<Bitmap, Integer, Integer> task) {
try{
task.execute(currentThumbnail);
while(!tasks.isEmpty()){
task = tasks.remove();
task.execute(currentThumbnail);
}
} catch (RejectedExecutionException r){
Log.i(TAG,"Caught RejectedExecutionException Exception - Adding task to Queue");
tasks.add(task);
}
}
은 단순히 큐에 거부 작업을 추가하고 스레드가 큐를 다시 시작하면 백 로그가 있는지 확인합니다.
명백한 문제는 최종 작업이 첫 번째 시도에서 거부되면 더 이상 필요하지 않을 때까지 다시 시작되지 않는다는 것입니다.
단순한 모델이 있는지 궁금해서 이런 종류의 관리에 사용해야합니다. 완료 될 때 대기열에 알리기위한 작업이 필요하므로 공간이 있다는 것을 알지만 어떻게해야할지 모르겠습니다. 당신이 당신의 구현을 수정 도움이 될 수 있습니다 주제에 많은 도움이 기사에 대한 위키 피 디아 문서 포인트 -
종류와 관련,
개빈
한계는 더 이상 10이 아닙니다. AsyncTasks가 12 개가 해고 될 의도가 없으므로 제한이 적용되었습니다. 이러한 작업의 목표는 UI를 업데이트하는 것이므로 업데이트를 유발하는 수십 개의 스레드를 갖는 것은 매우 끔찍합니다. –
한계는 현재 http://google.com/codesearch#uX1GffpyOZk/core/java/android/os/AsyncTask.java에 따라 5 병렬 스레드입니다. –
@Grantland Chew : 아니요, 5 번부터 시작하겠습니다. 그것은 그 이상으로 성장할 수 있습니다. – CommonsWare