我只有一个公共函数,我有一些循环等。在我的函数的开头,我启动我的AsyncTask,它返回一个在此函数结束时需要的值。但不知何故AsyncTask只是在这个函数完成后才开始?有没有办法在之前或并行运行Asynctask?直到今天我还以为AsyncTask通常是并行的。我找到了方法
获得()
但这冻结了线程......我需要一个替代方案或修复
public void my_function ()
{
new async_task().execute()
... //do something
if (returned_value_from_async_task == 10) //Here I need the variable which is returned in the async_task
{
... //do something
}
} //End of function
//When I go to debug mode the AsyncTask starts right here
答案 0 :(得分:2)
是。这是AsyncTask
的“异步”部分。函数末尾的代码不会等待任务完成。所以你不能依赖那些数据。您在函数中运行的代码可能花费的时间少于ThreadPoolExecutor
完成任务所需的时间。
执行依赖于AsyncTask
onPostExecute
的数据的代码
编辑:
如果不知道“更复杂”意味着什么,很难说你最好的选择是什么。但你可以拆分这个功能,因此
public void preExecutePrep() {
YourTask yourTask = new YourTask();
yourTask.execute();
//do what you can without the result
}
private void postExecuteCode(int result) {
if (result != 10) return;
//do the rest
}
然后在postExecuteCode
中致电onPostExecute
。如果这不会削减它,我将需要更多具体信息来帮助