Android に限らないけど イベント駆動タイプの処理内では、
ビジーループはNGですね。
例えば
・ボタンを押された時にダイアログを表示し、その結果を待つ。
という処理がしたい場合 iアプリでは以下の様に行う。
Dialog dlg = new Dialog( Dialog.DIALOG_INFO, "hoge" ); dlg.setText( "めっせーじ" ); result = dlg.show(); |
上記では show メソッドが同期呼び出しなので、ダイアログが閉じられるまでは
show() で停止します( 待ちます )。
Doja アプリではメインループがあり、あまり意識する事が無いかと思いますが、
Android ではメインループは基本的には無い。
MIDlet 系と同じで、自分でスレッドを作成しループを実装する必要がある。
それを踏まえず、ついつい onClick() などのイベントでダイアログを表示させ
イベント処理中に同期を行ってしまうと、画面が更新されないのでフリーズに
等しい状況になってしまいます。
本項目とは別ですが、バックグラウンド処理を行いプログレスバーを表示する
AsyncTask / ProgressDialog クラスを併用すると、例外が発生することがある
みたい…
奥が深い。
0 コメント:
コメントを投稿