RejectedExecutionException 128活动线程AsyncTaskLoader

时间:2013-06-16 21:53:57

标签: android multithreading android-cursorloader threadpoolexecutor asynctaskloader

我使用AsyncTaskLoader搜索了RejectedExecutionException的解决方案,但没有一个有效。其中大部分是针对像https://github.com/commonsguy/cwac-task/blob/master/src/com/commonsware/cwac/task/AsyncTaskEx.java这样的AsyncTask,但AsyncTaskLoader有点不同。

我尝试的第一件事是onCreateLoader()在返回CursorLoader之前执行此操作。

    if (loaderCount >= 100)
    {

        cursorLoader.setUpdateThrottle(1000000000);

    }

真正做的就是在100之后停止装载机,这不是我想要的。我尝试了不同的价值观,但似乎是浪费时间,因为它没有解决问题。

然后我发现了这个:Submitting tasks to a thread-pool gives RejectedExecutionException但是我不确定这个答案如何帮助解决这个问题,或者如何将它与asynctaskloader一起使用。

我还尝试创建一个ThreadPoolExecutor对象来更改池大小,但我不确定如何同时使用它和asynctaskLoader。我甚至不确定它是否会改变任何东西。

我也试过做Thread.sleep(),但这只适用于我发现的UI线程,对我认为的后台线程没有任何作用。

我可以为这个特定情况做一个app重新设计,我正在这样做会引发执行,但是加载器计数只会降到26或28.我听说10是某些Android版本的最大值所以我'我很担心。希望我不必在UI线程中执行我的查询,因为我认为它们运行得非常快。我只能使用CursorLoader完成128个以上的查询。我该如何解决这个问题?我该怎么办?

这是日志的引起:部分

    Caused by: java.util.concurrent.RejectedExecutionException: Task android.support.v4.content.ModernAsyncTask$3@414f9bc0 rejected from java.util.concurrent.ThreadPoolExecutor@411d9600[Running, pool size = 128, active threads = 128, queued tasks = 10, completed tasks = 0]

0 个答案:

没有答案