【问题标题】:How to solve RejectedExecutionException of AsyncTask?如何解决 AsyncTask 的 RejectedExecutionException?
【发布时间】:2019-03-29 23:58:16
【问题描述】:

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

【问题讨论】:

    标签: android service android-asynctask jobintentservice


    【解决方案1】:

    我正在从 JobIntentService 调用 asyncTask

    这不太可能是个好计划。

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

    部分原因是AsyncTaskpoint 是在后台工作完成后在主应用程序线程上工作。 JobIntentService 没有理由尝试在主应用程序线程上工作。

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

    但得到以下异常

    您已启动 137 项尚未完成的任务,您可以启动多少待处理的AsyncTasks 是有限制的。

    【讨论】:

    • @Ragini:不要使用JobIntentService 中的AsyncTask
    猜你喜欢
    • 2011-01-30
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多