android - AsyncTask 是否存在并发错误?

标签 android concurrency android-asynctask onpause

我遇到了我的 Activity 被暂停的情况,并且通过 onPause() 方法我取消了我的 AsyncTask。但是,我的日志按时间顺序显示以下事件:

  1. OnPause 已调用
  2. AsyncTask 已从 OnPause 取消。 cancel(false) 返回 true 表示任务已成功取消。
  3. 尽管 contract that it won't ever be called if cancelled 仍会调用
  4. onPostExecute .

有人看过这个吗? LogCat 消息是否能保证以准确的顺序呈现?

最佳答案

据我所知,LogCat 消息的顺序是正确的。

问题可能是,您的 AsyncTask 无法取消。在 AsyncTask 上调用 Cancel() 并不能保证取消它。您可以将参数 boolean mayInterruptIfRunning 设置为 true。然而,即使将其设置为 true 后,它也对我不起作用。

您可以在onCancelled()方法中检查AsyncTask是否被取消。如果控件到达此方法,则意味着它被取消。
看看 this 中的答案和 this问题。

关于android - AsyncTask 是否存在并发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11858307/

相关文章:

java - 通过 contentobserver 添加/删除/编辑联系人时通知我的应用程序

android - 如何检测当前正在使用的 fragment

jakarta-ee - 来自不同客户端的 EJB3 有状态并发调用

java - Android 位图重用

android - 中国Android设备杀死后台服务

java - 如何在 HashMap 中演示竞争条件?

ios - 使用dispatch_group_async的并发代码的性能比单线程版本慢很多

java - HttpResponse 使用 android 问题 : execute always causes exception?

java - 我手动强制退出应用程序并重新启动后,异步任务不会调用 OnPostExecute 或 onProgressUpdate

Android - 如何获得调用 Activity ?