0

从 AsyncTask 的 onPost 在布局中添加大视图时,进度对话框冻结。我们必须添加一个动态布局,所以我们从 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();
        }

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

4

1 回答 1

1

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

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

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

编辑

很明显,您的主 UI 做了很多工作。你可以试试这个,但我不确定这能工作多远。除了在progressdialog.dismiss() 之后立即调用方法,您还可以使用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(); 时才会调用它。叫做。所以它应该可以工作。

于 2012-12-10T12:31:27.710 回答