【问题标题】:Is this safe to use the host fragment/activity in an AsyncTask?在 AsyncTask 中使用主机片段/活动是否安全?
【发布时间】:2014-01-29 19:10:40
【问题描述】:

我的活动或活动中的片段使用异步任务来执行 CPU 密集型工作。我想知道在异步任务中的哪个位置可以安全地使用主机活动或片段。

我猜 onPostExecute 应该没问题,因为异步任务旨在帮助 UI 线程,我在 onPostExecute 中看到了更新 UI 的示例。

但是在 doInBackground 中这样做也安全吗?在doInBackground期间是否有可能破坏片段或活动?

【问题讨论】:

  • 为什么不先检查 AsyncTask 的文档?\
  • 在 developer.android.com/reference/android/os/AsyncTask.html 中,它只说异步任务像后台任务一样运行。就其语义而言,onPostExecute 在最后一步被调用,此时它仍可用于更新 UI。因此,它有点暗示主机 UI 在异步任务的整个过程中仍然可用。所以,doInBackground 应该是安全的。如果用户在执行期间杀死了前台 UI,会发生什么?运行时是否确保在异步任务完成之前不会发生这种情况?谢谢,

标签: android android-fragments android-activity android-asynctask


【解决方案1】:

您的 doInBackground() 可以调用 publishProgress() 将进度更新发送到 UI 线程。然后您可以覆盖 onProgressUpdate() 并从该方法内部更新 UI。

是的,您的片段和活动可能会在 AsyncTask 运行时被销毁。您必须在从 AsyncTask 更新 UI 之前检查这一点。

有更多信息http://developer.android.com/reference/android/os/AsyncTask.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多