如何使主线程等待,当我不知道什么时候Async任务完成工作。

时间:2013-01-08 11:08:13

标签: android android-asynctask

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

6 个答案:

答案 0 :(得分:6)

如果要完成AsycTask,则可以使用AsyncTask中的.get()方法。 (将阻止MainUiThread

但我认为最好的方法是不阻止 MainUiThread 你必须在onPreExecute()填充ListView 之后启动 ProgressDialog onPostExecute()的AsyncTask完成onPostExecute()中的 ProgressDialog

答案 1 :(得分:5)

如果您使用过AsyncTask,那么在doInBackground()中执行xml fetch并更新onPostExecute()中listview的所有UI元素,它在主UI线程上运行,并在doInBackground()之后自动运行。这样你就不必明确地让UI线程等待

答案 2 :(得分:3)

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

您可能还想查看最新的Loader设计。

答案 3 :(得分:3)

- 首先 Android 中的Main个帖子是Dedicated UI thread

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

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

- 使用await()的{​​{1}}和countDown()等方法执行此操作。

答案 4 :(得分:2)

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

注意:这将停止执行Main Thead,直到从AsyncTask检索到结果

答案 5 :(得分:0)

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

RunInBackGround是您的AsyncTasc类名。 首先将运行异步任务,完成后将显示以下消息!