我正在通过以下方法从JobIntentService调用asyncTask
public static void search(final String searchTerm, ApiCallback<SearchResult<Item>> apiCallback) {
new SimpleTask<>(new SimpleTask.TaskAction<SearchResult<Item>>() {
@Override
public SearchResult<Item> doTask() {
return new SearchResult<>(
searchTerm,
ArrayUtils.INSTANCE.concat(
SearchController.getSearch(Controller.DRUG, searchTerm)
);
}
}, apiCallback).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
但是要遵循以下例外条件
Caused by java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@fbb2c9 rejected from java.util.concurrent.ThreadPoolExecutor@c1a8dce[Running, pool size = 9, active threads = 9, queued tasks = 128, completed tasks = 22]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2078)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:843)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1389)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:651)
答案 0 :(得分:2)
我正在从JobIntentService调用asyncTask
这不太可能是个好计划。
部分是因为您的onHandleWork()
方法已经在后台线程上已经了。您不需要第二个。
部分是因为AsyncTask
的 point 是在后台工作完成后在主应用程序线程上进行工作。 JobIntentService
没有理由尝试在主应用程序线程上进行工作。
部分原因是,onHandleWork()
返回后,您的进程可能会停止,从而杀死AsyncTasks
。
但是要遵循以下例外条件
您已经启动了137个尚未完成的任务,并且可以启动的未决AsyncTasks
数量是有限制的。