我正在使用Async任务解析包含一些名称的xml文件,并通过主线程再次将这些名称填充到listview中。但是在我的情况下发生的事情是,当异步任务仍在运行时,主线程已经将名称填充到listview,这导致listview上没有项目。我应该让主线程等待,直到异步任务完成的工作,或者有任何其他方法来解决这个问题。如果是,我怎么能让主线程等待,当我不知道多长时间的异步任务可能需要完成。
如果你想完成AsyncTask,那么你可以使用来自AsyncTask的.get()
方法。(这将阻止MainUiThread)
但我认为最好的方法是不阻塞MainUiThread你必须开始ProgressDialog在onPreExecute()
和后填充ListView在onPostExecute()
的AsyncTask完成ProgressDialog在onPostExecute()
。
如果你已经使用了AsyncTask,那么在doInBackground()中进行xml获取,并在onPostExecute()中更新listview的所有UI元素,这在主UI线程上运行,并在doInBackground()之后自动运行。这样你就不必显式地让UI线程等待
您不希望阻塞主线程并等待异步任务(这会破坏异步任务的目的)。相反,异步任务应该在完成onPostExecute
方法时触发更新。
您可能还想看看最近的Loader
设计
-首先Main
线程在Android是Dedicated UI thread
。
-您需要做的是通过解析带有名称的xml来填充列表,然后继续在ListView上显示它。
-您可以使用java.util.concurrent
包中的CoundDownLatch
将数据填充到列表中,然后在ListView
上显示。
-使用CoundDownLatch
的await()
和countDown()
的方法来执行此操作
使用AsyncTask.get()等待AsyncTask完成。
注意:这将停止主线程的执行,直到结果没有从AsyncTask
String str_result= new RunInBackGround().execute().get();
Log.e("","show this");
RunInBackGround是你的asynctask类名。首先将运行异步任务,当它完成时将显示下面的消息!