android - 现代异步任务 IllegalStateException

标签 android

我们在我们的应用程序中使用 AsyncTaskLoaders 来加载内容。我们正在崩溃

java.lang.IllegalStateException: Cannot execute task: the task is already running.
   at android.support.v4.content.ModernAsyncTask.doInBackground(ModernAsyncTask.java:414)
   at android.support.v4.content.AsyncTaskLoader.executePendingTask(AsyncTaskLoader.java:219)
   at android.support.v4.content.AsyncTaskLoader.dispatchOnCancelled(AsyncTaskLoader.java:232)
   at android.support.v4.content.AsyncTaskLoader$LoadTask.onCancelled(AsyncTaskLoader.java:88)
   at android.support.v4.content.ModernAsyncTask.finish(ModernAsyncTask.java:464)
   at android.support.v4.content.ModernAsyncTask.access$400(ModernAsyncTask.java:48)
   at android.support.v4.content.ModernAsyncTask$InternalHandler.handleMessage(ModernAsyncTask.java:483)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:211)
   at android.app.ActivityThread.main(ActivityThread.java:5335)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)

我们已经尝试重现这个,但没有成功!

有没有办法找出导致此问题的加载程序?

我们正在使用 com.android.support:support-v4:23.0.1

我们正在调查这可能与 Activity 泄漏有关的可能性,除此之外,这就是我们获得的所有信息。

有什么想法吗?

最佳答案

我仍在寻找这个错误,因为我自己无法重现它,但我相信我找到了原因(至少对我来说是这样,但我必须发布并查看它是否有帮助)。

事实证明,当我在我的加载器上创建观察者时,我将处理程序作为 null 传递,期望与我使用 Handler 的默认构造函数时得到的类似行为(为了它在主线程上运行,我正在创建的线程它来自)。 然而,发生的事情是它立即从任何线程调用 onChange .. onChange 至少在我的情况下调用加载程序的 onContentChanged,据记录需要从主线程调用...因为情况并非如此,任务和cancellationTask 搞砸了(因为缺少更好的技术术语),导致在任务的意外状态下触发取消,因此出现错误消息。

这在我的案例中也表现为加载器没有正确更新条目,取消任务已经加载了一个值,因此加载器丢弃了新任务,因此新加载被跳过(takeContentChanged 为 false)。

因此请确保您在主线程中使用 new Handler() 初始化您的观察者(onStartLoading 应该是执行此操作的好地方)。

关于android - 现代异步任务 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33124568/

相关文章:

Android,处理程序消息传递

android - keytool 和 openssl 证书指纹不匹配

android - 如何计算使用 wifi 的 Android 手机的功耗?

android - 如何在从mysql获取数据的listview中使用onItemClick?

android - 在android sqlite中存储从光标到数组列表的值

java - 字体配置错误 : Cannot load default config file

android - Android Wear 上的直接互联网连接?

android - 三星sm-t531开发者选项在哪里

android - 如何禁用 RecyclerView 动画?

java - 如何以编程方式设置背景图像?