我有应用程序,需要按特定顺序加载数据。原因很简单。需要data
来构建Data1
等。例如,如果您有正在加载用户个人资料的应用程序,则需要用户个人资料数据才能在应用程序中加载其他内容。
因此,我调用Data2
AsyncTask,它将在api.startup()
调用onPreExecute()
内,在animation onUIThread
方法内调用另一个api doInBackground()
调用(称为{{ 1}})。
当一个呼叫结束并且在asyncTask
中接收到数据时,如果成功,它将调用另一个asyncTask()。
下面您可以看到它应该如何工作。但是将会发生的事情是,随着getData1()
asyncTask结束,它将切换到CallBack
(在getData1()
内部)并将true返回给我的回调。但是onPostExecute()
仍在运行,这使我的splashAnimation滞后。
如何解决此问题?
api.startup()
答案 0 :(得分:0)
您看到的不是执行工作的方式。
一个线程执行语句一个接一个。因此,当您到达开始新线程的语句时,上一个线程将不等待该线程完成操作,而是将移至下一个语句。
类似地,当您执行启动AsyncTask并在printf
中调用方法doInBackground()
。现在,此方法正在启动新的AsyncTask(新线程),因此此方法将在启动Async任务后立即返回true。然后在onPostExecute()中得到它的响应。现在startupRequest()
已经完成,下一个AsyncTask正在工作。
您可以做的-
1)在第一个api调用中开始动画,并在最后一个API调用中结束动画,或
2)在同一个AsyncTask中调用所有API请求。
startup AsyncTask
loadData()调用是Sync API调用,这意味着您无需再运行AsyncTask。只需直接调用API。