我已经使用 AsyncTaskLoader 搜索了 RejectedExecutionException 的解决方案,但没有一个有效。它们中的大多数用于 AsyncTask,例如https://github.com/commonsguy/cwac-task/blob/master/src/com/commonsware/cwac/task/AsyncTaskEx.java但 AsyncTaskLoader 有点不同。
我尝试的第一件事是在 onCreateLoader() 返回 CursorLoader 之前执行此操作。
if (loaderCount >= 100)
{
cursorLoader.setUpdateThrottle(1000000000);
}
真正要做的就是在 100 之后停止加载程序,这不是我想要的。我试着玩弄不同的值,但这似乎是在浪费时间,因为它没有解决问题。
然后我发现了这个:Submitting tasks to a thread-pool give RejectedExecutionException但我不确定这个答案如何解决这个问题或如何将它与 asynctaskloader 一起使用。
我还尝试创建一个 ThreadPoolExecutor 对象来更改池大小,但我不确定如何同时使用它和 asynctaskLoader。我什至不确定它是否会改变任何东西。
我也尝试过 Thread.sleep() 但这仅适用于我发现的 UI 线程,并且对我认为的后台线程没有任何作用。
我可以针对我正在执行的这种特定情况重新设计应用程序,但加载程序计数只会下降到 26 或 28。我听说某些 Android 版本的最大值为 10,所以我很担心. 希望我不必仅仅在 UI 线程中进行查询,因为我认为它们已经运行得相当快了。只是我显然不能使用 CursorLoader 执行超过 128 个查询。我该如何解决这个问题?我应该怎么办?
这是日志的 Caused by: 部分
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]