UIスレッドでいくつかの作業を行う必要があります。具体的にはいくつかのビューなどを設定する必要があります。これはバックグラウンドスレッドでは実行できません。プロセスはボタンをクリックすると呼び出され、完了には約1秒かかります。進行状況ダイアログを表示せずに、アプリケーションがフリーズしているかのように見えます。私はいくつかの場所でAsynTask
と進捗ダイアログを使用し、それはうまく動作します - しかしここで私は苦労しています。Android - UIスレッドで作業中に進行状況のダイアログを表示
私はシンプルで開始:
これはUIスレッド上のすべてであるとダイアログが、(期待のソートを示していないでしょうが
showDialog(DIALOG_PLEASE_WAIT);
viewInfo.setFromGuide(true); //this method just sets a variable
viewInfo.setVenue(venue); //this method does a lot of UI manipulation and takes a second or so
showScreen(VIEW_INFO); //this method shows the corresponding view in ViewFlipper
dismissDialog(DIALOG_PLEASE_WAIT);
をそれから私はこれにコードを変更:。
Handler hnd = new Handler() {
@Override
handleMessage(Message m) {
viewInfo.setFromGuide(true);
viewInfo.setVenue(venue);
showScreen(VIEW_INFO);
dismissDialog(DIALOG_PLEASE_WAIT);
}
}
showDialog(DIALOG_PLEASE_WAIT);
new Thread() {
public void run() {
hnd.sendEmptyMessage(0);
}
}.start();
これはまだダイアログが表示されません。もちろん、handleMessage
のUIはまだUIスレッド上で実行されていますので、進捗ダイアログを表示するにはどうすればよいですか?
「しばらくお待ちください」などのメッセージを持つシンプルなトースト通知を使用するよりも、私はあなたがビューの初期化は時間がかかる作るために何をしているのかわからないんだけど、を取る取る場合複雑なものが読み込まれている間、ユーザーに基本的なUIを示すことをお勧めします。 UIをロードするプログレスバーは大きなノーノです。 – Glitch
UIの初期化の大部分は、ビットマップをImageViewsに設定し、(テキストの名前/値のペアの配列から)一連の属性を表示するカスタムビューをメインビューに動的に作成/追加することです。残念ながら、何かを見せてから残りの部分を読み込むのは簡単ではありません。 –
ワーカースレッドでこれらのアクションを実行してから、特定のメソッドでUIを更新できないのはなぜですか? – Tudor