【问题标题】:Waiting for ASyncTask to finish or variable to be set等待 ASyncTask 完成或设置变量
【发布时间】:2012-12-26 20:18:07
【问题描述】:

我正在尝试将活动中的变量设置为我的 AsyncTask 的结果。我读到我无法返回变量,我必须在我的活动中设置变量,然后在 onPostExecute 方法中更改它。

我的问题是,在 AsyncTask 完成后,我需要使用该变量。我遇到了这个问题,因为到目前为止我尝试过的所有解决方案都会导致 UI 冻结然后无响应。

到目前为止我所尝试的:

while (!task.isCancelled()) {
    // Wait... 
}

while (variable == null) { 
    // Wait ...
}

我正在做的是将变量从 AsyncTask 传递到我的 Activity 的最佳方式吗?如果是这样,我如何在不锁定 UI 的情况下等待任务在 Activity 中完成?

【问题讨论】:

  • 您不应该“等待”AsyncTask。完成后它应该做点什么,可能在onPostExecute()
  • onPostExecute() 方法中,我将活动中的变量更改为结果。我想做的是等到变量改变。
  • 完全正确——不要这样做。 AsyncTaskonPostExecute() 本身应该开始您希望在任务完成后发生的一系列事件。没有其他代码应该依赖该任务。

标签: android android-asynctask


【解决方案1】:

如果你依赖于 AsyncTask 的结果,你可以这样做。

Object result = asyncTask.execute().get();

结果的类型是 doInBackground() 方法中的返回类型。但是你的主线程将一直等到任务完成。

【讨论】:

  • 谢谢!这正是我想要的。
  • 但是如果你这样做你会阻塞主线程。这不值得推荐。
  • adalPaRi,除非是启动画面?
  • 或者一个测试用例。
【解决方案2】:

只需将变量更改后要执行的代码放入函数中,然后从 onPostExecute 调用此函数。

【讨论】:

  • 这不是一个干净的编码!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多