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 件のコメント:
コメントを投稿