0

我正在开发一个应用程序,其中在一个活动中将不同的视图添加到 ViewGroup 中,这个过程需要一段时间才能启动,所以我想在前台运行一个进度对话框,而 UI 可以在后台设置。

我试过的

我尝试使用

1. AsyncTask但它给出了 Exceptions 。2. 在使用线程和runnable()时,我得到InvocationTargetException

我想知道什么是最好的方法?

4

3 回答 3

1

您无法通过后台任务进行 UI 更改。

如果使用AsyncTask,则只能从onPostExecute()onProgressUpdate()方法更新 UI。

另一种选择是使用 a Handler,它(除其他外)可以Runnable在主线程上执行 s 。

编辑:处理程序必须在主线程上实例化。在任何线程中,您都可以使用post(Runnable)orsendMessage(Message)以及它们的各种变体。因为sendMessage()你需要覆盖handleMessage(Message).

于 2013-02-13T09:36:05.523 回答
0

你能插入一些你的代码吗?这将有助于确定问题的原因。

但是您需要知道您不能从后台线程更改 UI。它会给你一个例外。您可以做的是编写一个AsyncTask,它在其方法中初始化对象并为它们分配值,然后在其doInBackground方法中修改 UI 线程onPostExecute

它看起来像这样:

private class myAsyncTask extends AsyncTask<Void,Void,Void>
{
  @Override
  protected void onPreExecute()
  {
   //show progress dialog
  }

  @Override
  protected Void doInBackground(Void... arg0)
  {
    //init objects, and do stuff with them
    return null;
  }

  @Override
  protected void onPostExecute(Void result)
  {
    //make changes to UI thread 
    //close progress dialog
  }

}
于 2013-02-13T09:38:23.373 回答
0

Juste 保留您的 AsyncTask 并在 onPostExecute 中更新 UI,而不是在 doInBackground 中执行此操作。

于 2013-02-13T10:04:29.663 回答