我使用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]