如何使主线程等待,当我不知道何时将异步任务完成的工作



我正在使用Async任务解析包含一些名称的xml文件,并通过主线程再次将这些名称填充到listview中。但是在我的情况下发生的事情是,当异步任务仍在运行时,主线程已经将名称填充到listview,这导致listview上没有项目。我应该让主线程等待,直到异步任务完成的工作,或者有任何其他方法来解决这个问题。如果是,我怎么能让主线程等待,当我不知道多长时间的异步任务可能需要完成。

如果你想完成AsyncTask,那么你可以使用来自AsyncTask的.get()方法。(这将阻止MainUiThread)

但我认为最好的方法是不阻塞MainUiThread你必须开始ProgressDialogonPreExecute()和后填充ListViewonPostExecute()的AsyncTask完成ProgressDialogonPostExecute()

如果你已经使用了AsyncTask,那么在doInBackground()中进行xml获取,并在onPostExecute()中更新listview的所有UI元素,这在主UI线程上运行,并在doInBackground()之后自动运行。这样你就不必显式地让UI线程等待

您不希望阻塞主线程并等待异步任务(这会破坏异步任务的目的)。相反,异步任务应该在完成onPostExecute方法时触发更新。

您可能还想看看最近的Loader设计

-首先Main线程在AndroidDedicated UI thread

-您需要做的是通过解析带有名称的xml来填充列表,然后继续在ListView上显示它。

-您可以使用java.util.concurrent包中的CoundDownLatch将数据填充到列表中,然后在ListView上显示。

-使用CoundDownLatchawait()countDown()的方法来执行此操作

使用AsyncTask.get()等待AsyncTask完成。

注意:这将停止主线程的执行,直到结果没有从AsyncTask

String str_result= new RunInBackGround().execute().get();
Log.e("","show this");

RunInBackGround是你的asynctask类名。首先将运行异步任务,当它完成时将显示下面的消息!

相关内容

  • 没有找到相关文章

最新更新