【问题标题】:Android background thread and activity relation?Android后台线程和Activity的关系?
【发布时间】:2013-05-29 04:28:59
【问题描述】:

我的 android 应用程序使用 AsyncTask 从网站下载一些数据。

但是当我在活动开始后立即按下我的android设备的后退按钮时,工作线程的onPostExecute方法被调用,这很奇怪,因为android之前调用了onDestroy方法到 onPostExecute 和 onPostExecute 方法在我认为不再存在的主 UIThread 上运行。

谁能帮我解决我不明白的问题?

【问题讨论】:

  • AsyncTask 的全部意义在于在单独的线程上运行一个进程,因此它将在主 UI 线程的 onDestroy 之后完成,因为它不是同一个线程。如果您想在按回时终止任务,可以在 onBackPressed() 方法中调用 yourTaskName.cancel()

标签: android android-activity activity-lifecycle background-thread


【解决方案1】:

AsyncTask 基本上是在后台作为与 UI 分开的线程执行您想要的操作。因此,当您退出 UI 时,这并不一定意味着您已经杀死了 AsyncTask。它将继续其正常的生命周期并以onPostExecute 结束。如果你也想杀死AsyncTask,那么你必须为AsyncTask调用cancel()函数。

知道这一点,您实际上无法杀死AsyncTask,这将由 Android 自己完成。因此,您将不得不等待一段时间,直到当前任务被终止(如果您调用 cancel()),您才能重新启动这个特定的 AsyncTask

您还应该阅读onCancelled() 方法。欲了解更多信息,请查看documentation

如果我犯了任何错误,请纠正我。

【讨论】:

  • 好的。另一个问题。我的应用程序显示了一些关于主要活动的数据,asynctask 正在下载它们。这是我不t fully understand.While my asynctask is downloading the data,i press home button which calls onStop method and the activity is no longer visible. This means my asynctask cant 刷新活动视图的场景??
  • 就我所见,在 UI 中通过asyncTask 更新的唯一部分是进度对话框,而它仍在执行doInBackground。恢复活动后将更新。在那之前,它实际上并没有更新对话框,而是存储进度。所以,如果它是 4%,你就离开,它被处理到 10%,然后你恢复活动,它将显示 10%。
猜你喜欢
  • 1970-01-01
  • 2012-06-06
  • 2015-05-09
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多