0

私は次の構造を持っています:

UIActivity1:

MyMyProgressDialogFragment progressDialog = MyMyProgressDialogFragment.newInstance();
progressDialog.show(getFragmentManager(),"dialog");
getFragmentManager().executePendingTransactions();
..do some heavy work and send messages to progressDialog

DialogFragmentが作成され、このフラグメントの ProgressBar が回転を開始します

しかし、ダイアログフラグメントを作成したアクティビティで重い作業を開始すると、フラグメント内の進行状況バーが停止します。

フラグメント ドキュメントを読むと、Ui Activity1 と同じように、フラグメントには独自のアクティビティがあることがわかります。そして、各アクティビティは別々のスレッドで実行されます。

では、UIActivity1 が重い作業を開始したときに、ダイアログ フラグメントのプログレスバーが停止するのはなぜでしょうか?

彼らは独立するべきではありませんか?

ps別のタスクでUIActivityの外で重い作業を再度実行すると、プログレスバーは問題なく回転し続けます。

ここで私の理解のどこが間違っていますか?

ありがとう!

4

1 に答える 1

0

あなたが共有した情報からは明らかではありませんが、UI スレッドですべての重い実行を行っているようです。それがアクティビティのメイン スレッドです。フラグメントでスピンオフするアクティビティがこの作業だけを行うことを意図しているかどうかは関係ありません。UI スレッドは、UI 要素を更新するためだけに使用する必要があり、通常は 100 ~ 200 ミリ秒以上かかるタスクを回避する必要があります。これは、android Non-Responsive Application documentation によるものです。これはおそらく問題です。長期にわたるタスクや長時間実行されるタスクは、バックグラウンド スレッドで実行する必要があります。

Android でプログレスバーを使用するこの例を見てください。

于 2012-04-04T22:41:55.887 に答える