【发布时间】:2014-08-02 12:13:52
【问题描述】:
请为 android 应用程序提出一个解决方案,用户可以通过单击按钮请求执行任务。
*这里的任务是非ui活动
- 我需要允许用户执行多个请求
- 在多个任务执行期间,任务执行器应该等待完成所有任务。
- 当多个任务中的任何任务完成并且任务执行器正在等待其他任务完成时,如果用户请求其他任务 任务,所以我应该被接受和执行。
- 此任务应在 android 服务中执行,因此在应用程序退出时它不应终止。
我的表现如何:
- 我正在使用 ExcutorService & ExecutorCompletionService 它会抛出错误,因为任务执行器是 等待其他任务完成,然后如果用户请求其他任务
java.util.concurrent.RejectedExecutionException: 任务 java.util.concurrent.ExecutorCompletionService$QueueingFuture@4198abe8 从 java.util.concurrent.ThreadPoolExecutor@41caf8f8 被拒绝 [正在关闭,池大小 = 1,活动线程 = 1,排队任务= 0,完成的任务 = 1]
public int onStartCommand(Intent intent, int flags, int startId) {
if (mIsAlreadyRunning) {
MyTask task = new MyTask(++count, intent);
mEcs.submit(task);
}
return super.onStartCommand(intent, flags, startId);
}
protected void onHandleIntent(Intent intent) {
if (mIsAlreadyRunning) {
return;
}
mIsAlreadyRunning = true;
final Collection<MyTask> tasks = mTasks;
MyTask yt1 = new MyTask(count, intent);
tasks.add(yt1);
// wait for finish
for (MyTask t : tasks) {
mEcs.submit(t);
}
int n = tasks.size();
for (int i = 0; i < n; ++i) {
NoResultType r;
try {
r = mEcs.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
mExec.shutdown();
try {
mExec.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
谢谢。
【问题讨论】:
标签: java android multithreading executorservice