如何在AThreadTask调用期间不滞后的情况下在UIThread中运行splashAnimation?

时间:2018-10-01 18:35:00

标签: android kotlin android-asynctask

我有应用程序,需要按特定顺序加载数据。原因很简单。需要data来构建Data1等。例如,如果您有正在加载用户个人资料的应用程序,则需要用户个人资料数据才能在应用程序中加载其他内容。

因此,我调用Data2 AsyncTask,它将在api.startup()调用onPreExecute()内,在animation onUIThread方法内调用另一个api doInBackground()调用(称为{{ 1}})。

当一个呼叫结束并且在asyncTask中接收到数据时,如果成功,它将调用另一个asyncTask()。

下面您可以看到它应该如何工作。但是将会发生的事情是,随着getData1() asyncTask结束,它将切换到CallBack(在getData1()内部)并将true返回给我的回调。但是onPostExecute()仍在运行,这使我的splashAnimation滞后。

如何解决此问题?

enter image description here

api.startup()

1 个答案:

答案 0 :(得分:0)

您看到的不是执行工作的方式。

一个线程执行语句一个接一个。因此,当您到达开始新线程的语句时,上一个线程将不等待该线程完成操作,而是将移至下一个语句。

类似地,当您执行启动AsyncTask并在printf中调用方法doInBackground()。现在,此方法正在启动新的AsyncTask(新线程),因此此方法将在启动Async任务后立即返回true。然后在onPostExecute()中得到它的响应。现在startupRequest()已经完成,下一个AsyncTask正在工作。

您可以做的-

1)在第一个api调用中开始动画,并在最后一个API调用中结束动画,或

2)在同一个AsyncTask中调用所有API请求。

startup AsyncTask

loadData()调用是Sync API调用,这意味着您无需再运行AsyncTask。只需直接调用API。