過去の投稿記事 new!
・【画像】漫画でわかる外国人参政権
・東京電力のHPで停電状態が確認できたり(サービス再開!)
・戦国時代 ~ 江戸時代の徳川家康が熱かった
・vaio のバッテリは寿命が短いような気がする
・話題の Western Digital 製 WD20EARS を購入した
・C01LC をビックカメラで買ってきた
・2025年には空中都市が現実化?!
・【動画】わかりやすい「宇宙ひも理論」
・今世紀には「富士山噴火」「東海連動地震」「首都圏直下型地震」か?
・滅びた町、南浜町が Googleストリートビューで見れる

【 amazon 送料無料キャンペーン 】

バックリンクはご自由にどうぞ!     http://mfsocket.blogspot.com/feeds/posts/default?alt=rss リンク集 / ログイン

2010/11/24
Android イベント中にビジーループはNG

 
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 コメント:

  • コメントには <b>, <strong>, <em>, <i>, <a> など一部の HTML タグを使用できます。