等待ASyncTask完成或变量设置

Dan*_*Dan 13 android android-asynctask

我试图将一个活动中的变量设置为我的AsyncTask的结果.我已经读过,我不能返回变量,我必须在我的活动中设置变量,然后在onPostExecute方法中更改它.

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

到目前为止我尝试了什么:

while (!task.isCancelled()) {
    // Wait... 
}
Run Code Online (Sandbox Code Playgroud)

while (variable == null) { 
    // Wait ...
}
Run Code Online (Sandbox Code Playgroud)

我正在做的是将变量从AsyncTask传递给我的Activity的最佳方法吗?如果是,那么如何在不锁定UI的情况下等待任务完成活动?

小智 50

如果您依赖于AsyncTask的结果,则可以执行此操作.

Object result = asyncTask.execute().get();
Run Code Online (Sandbox Code Playgroud)

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

  • 但是如果你这样做,你将阻止主线程.这不是可以重复的. (10认同)

Adn*_*jad 12

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

  • 这不是一个干净的编码! (2认同)