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 に答える