1

我有一个实现 TabContentFactory 的 TabActivity,它在 onCreate() 中启动一个 AsyncTask 以获取选项卡的数据。当 AsyncTask 完成后, onPostExecute() 可以直接更新 UI 元素,对吧?这意味着,由于该方法在 UI 线程中运行,因此在访问 UI 元素时不需要进一步的线程同步?

无论如何,我遇到的问题是我的 UI 线程在 TabActivity 中调用 createTabContent() 而 AsyncTask 仍然很忙。我必须添加至少一个选项卡,否则我会收到 NullPointerException。但是,当我的 AsyncTask 完成并且 ProgressDialog 已被关闭时,如何只添加选项卡?

如果有人可以提供帮助,我会很高兴...

4

1 回答 1

1
When the AsyncTask has finished, onPostExecute() could directly update the 
UI-elements, right? Meaning, since that method runs in the UI-Thread no further 
thread-synchronization would be required when accessing UI-elements?

对。

Anyway, the problem I have is that my UI-Thread calls createTabContent() in the
TabActivity while the AsyncTask is still busy.

如果您需要在 AsyncTask 仍在后台运行时更新 UI,则覆盖 AsyncTask.onProgressUpdate(..),然后从 AsyncTask.doInBackground(..) 中调用 AsyncTask.publishProgress(..)。

I have to add at least one tab, or I get a NullPointerException. But how do I 
only add tabs when my AsyncTask has finished and the ProgressDialog has been 
dismissed?

我不明白这一点。你能更详细地解释一下吗?

无论如何,请注意这些事情:

  1. 只有在 TabActivity 完全创建后才启动 AsyncTask。从 onPostCreate() 而不是 onCreate() 开始。这可能是 NullPointerException 的来源。
  2. 您可以从 AsyncTask.onPostExecute(..) 中的 UI 线程更新任何活动
  3. 如果您需要在 AsyncTask 仍在后台运行时更新 UI,请从 AsyncTask.doInBackground(..) 中调用 AsyncTask.publishProgress(..)
于 2010-10-23T18:23:18.327 回答