Activity の onResume と onPause が Activity を切り替える時に発生するので、このタイミングで unbindService したり、bindService してると、onActivityResult のイベント時に、サービスの準備が整っていなくて、どはまりするという…。いやはや、参りますね…。
こういう事ばかり経験していると、以下のようなバッドノウハウが当たり前になってくる…。
Handler handler_ = new Handler(); public void postHoge() { handler_.post( new Runnable() { public void run() { // メインスレッドで実行したいコード hoge(); } }); }
new Thread(new Runnable() { public void run() { // 1秒後に、Looper のメッセージキューへハンドラが投入される // この1秒という数字には、何の根拠も無い。 // 9割方は、うまく動作するだろう。しかし、稀にエラーを引き起こすだろう。 Thread.sleep( 1000 ); postHoge(); } }).start();
もちろん、こんな根拠の無いコードは書かない。ただし、何かウェイトを入れなければならない場合には、関数 hoge() のコード内から、状況を確認した上で、Thread.sleep を駆使して、postHoge() するようなコードは、十分考えられる。ただし、状況が改善されるのが、異なるスレッドからによる場合に限定される。
0 件のコメント:
コメントを投稿