在视图中添加布局时,ProgressDialog会冻结

时间:2012-12-10 12:27:12

标签: android android-layout progressdialog

从onPost of AsyncTask添加布局中的大视图时,

进度对话框冻结。我们必须添加一个动态布局,所以我们从onPost调用它,(在调用doInBackground时发生错误,所以我们从opPost调用它)但是现在加载那个布局时进度对话框会冻结。

请帮助......

我创建了一个单独的类并调用了该类方法

protected void onPostExecute(Void unused)
        {

            eLayout=new ExcelLayout(viewScreenActivity);
            eLayout.LinearLayoutXLSView(ROW_HEIGHT, COL_WIDTH, ROW_Title_Width,NUM_COLS, NUM_ROWS, cols, rows, data);

            progressdialog.dismiss();
        }

进度对话框冻结并在任务完成后消失。

1 个答案:

答案 0 :(得分:1)

当有一个巨大的进程(例如在主UI线程中绘制视图时)会引发此问题。进度对话框是非常轻量级的过程,当一些其他过程优先时,它们只是停在那里而不旋转(简单),这使它看起来像是挂起了。但实际的原因是,还有一些其他过程比显示进度对话更优先。

在您的情况下,视图创建优先。所以你需要做的是,在开始绘制布局之前关闭对话框。

但是,如果您正在寻找一种在绘制视图时显示进度对话框的方法,那么根据我迄今为止的经验,我担心这是不可能的。

修改

很明显,你的主UI做了很多工作。你可以尝试这个,但我不知道这会有多大作用。您可以使用dismiss侦听器并从那里调用方法,而不是仅在progressdialog.dismiss()之后立即调用方法。例如,

progressDialog.setOnDismissListener(new OnDismissListener(){

  public void onDismiss(DialogInterface dialog) {

   eLayout=new ExcelLayout(viewScreenActivity);
        eLayout.LinearLayoutXLSView(ROW_HEIGHT, COL_WIDTH, ROW_Title_Width,NUM_COLS, NUM_ROWS, cols, rows, data);
  }});

因此只有在进度对话框的progressdialog.dismiss();叫做。所以它应该可行。