0

我在以下方法中从 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)
4

1 回答 1

2

我正在从 JobIntentService 调用 asyncTask

这不太可能是一个好计划。

部分原因是您的onHandleWork()方法已经在后台线程上。你不应该需要第二个。

部分原因是,当后台工作完成时,重点是在主应用程序线程上进行工作AsyncTask没有理由JobIntentService尝试在主应用程序线程上工作。

部分原因是因为您的进程可能会在onHandleWork()返回后立即停止,从而杀死您的AsyncTasks.

但是得到以下异常

您已经开始了 137 个尚未完成的任务,并且AsyncTasks您可以开始的待处理任务数量是有限制的。

于 2018-10-25T11:44:43.340 回答