2011-07-04 14 views
0

は、リスナーを実装するサービスでは、このようなAndroidのコードを考えてみましょう(方位センサーからのイベント):リスナー)が早すぎる問題をoccuring

public void onStateChanged() 
{ 
    //do some work 
    stopSelf(); 
} 

私はサービスがメソッドonStateChanged()後に死亡したいですトリガーされ、そのコードが実行された後。しかし、あまりにも早く死ぬ - "//do some work"が発生する前にstopSelf()が呼び出されています。私がデバッグ中にどこかで中断すると、"//do some work"すべてが正常に動作します。コードが実行され、サービスが終了します。 stopSelf()を削除するとコードが実行されます。私がそれを上記の方法で実行すると、"//do some work"から何もできません。何故ですか?それはどのように可能ですか?

答えて

0

他のスレッドで発生する可能性があります。一部のメソッドは、それらの作業が同時に行われている間にすぐに戻ります。 「仕事」に依存します。関連するonSomethingCompletedListenerがあります。あなたが試したコードを私たちに教えてください! Log.d( "blah")を挿入してみてください。より多くの情報を得るためのステートメント

+0

1.これは自分のリスナーで、電話機の向きが変わったかどうかを確認します。リスニングが完了したことを示すイベントを持つ機会はありません。 2.私は多くのロギングを挿入します!デバッグをオンにしない限り、何も記録されず、コードのどこかにブレークを入れます。 – jacek

+0

特有のものです。ここにランダムな考え方があります:変数を作るallDone = false;その後、すべての作業の終わりにallDone = trueと設定します。一方、あなたはstopSelf()の前に "while(!allDone)"というループを使います。私はおそらく道を離れて助けることができません:(あなたがコードを投稿すればもっと手がかりを得るかもしれません... Androidは奇妙なことがあります。 – karnok

+0

これはちょうど私のコードです - "do some work"しかし、私はそれを取り除いて、何か他のものに取り替えることができますが、それでも同じことが起こります... – jacek

関連する問題