等待ASyncTask完成或变量被设置

13

我正在尝试在活动中设置一个变量来存储我的AsyncTask的结果。我已经了解到我不能返回一个变量,而是需要在onPostExecute方法中设置变量并进行更改。

我的问题是,在AsyncTask完成后,我需要使用该变量。目前我尝试的所有解决方案都导致UI停滞不前,无响应。

我已经尝试过的方法:

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

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

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


11
你不应该一直“等待”AsyncTask的完成,它完成后应该在onPostExecute()中执行某些操作。 - Cat
1
onPostExecute()方法中,我正在将活动中的变量更改为结果。我的目标是等待变量被更改。 - Dan
1
不要这样做。AsyncTaskonPostExecute()本身应该启动您希望在任务完成后发生的一系列事件。没有其他代码应该依赖于该任务。 - Cat
2个回答

53

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

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

结果的类型是您的doInBackground()方法中的返回类型。但是,您的主线程将等待任务完成。


10
但如果你这样做会阻塞主线程,这是不推荐的。 - adalpari
1
除非是启动界面,否则将adapPaRi翻译成中文。 - Jan K.
或者一个测试用例。 - Viktor Brešan

13

只需将您想要在变量更改后执行的代码放入一个函数中,并从onPostExecute调用此函数。


2
这不是干净的编码! - M at

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接