1

Android TimerTask (私は信じています) で私を夢中にさせている問題を特定するのに苦労しています。

シナリオは次のとおりです。電話をかけた後、PhoneStateListener を使用してタイマーを開始し、特定の通話時間後にサウンドを再生します。

すべてが完璧に動作しますが、デバッグ モードにしないと (または単に電話をコンピューターに接続したままにする)、サウンドが常に鳴るとは限りません。

私の最大の問題は、問題を明確に特定できないことです。これは、電話のプラグが抜かれ、ログを読み取れない場合にのみ発生するためです。問題を 1 回だけ再現し (呼び出し後に音が出ない)、それに関するログを読んだところ、onCallStateChanged が呼び出され、Timer は OK でしたが、TimerTask は呼び出されなかった (またはスケジュールされていなかった) ことに気付きました。

ここでいくつかの質問を読んだ後、タイマーの代わりにハンドラーを使用しました。しかし、私はまったく同じ問題を抱えています。実際、ハンドラーを使用すると、電話機のプラグを抜き差しするだけで、この問題を再現するのがはるかに簡単になります (タイマーを使用すると、音が出ない問題を再現するのがより難しくなりました)。

私は間違ったことをしていますか、それとも何か他のものを実装する必要がありますか?

コメントをお待ちしております。

編集

どうやら、ハンドラーを使用すると、通話が開始されるとすぐに電話がスリープ状態になるため、これが発生します。ただし、これを防ぐために wake_lock を使用しても機能しません。電話がスリープ状態のときにスレッドを実行する別の方法はありますか?

4

1 に答える 1

0

さて、これに関する問題は、私が言ったように、通話中にスリープ状態になるときに電話がタイマーを停止したことでした。私はAlarmManagerの使用を終了しました。

AlarmReceiverはパブリッククラスである必要があることに注意してください。そうでない場合、receiveメソッドは呼び出されません。

しかし、なぜタイマーが機能するのか、機能しないのか、まだ理解できません。

よろしく

于 2012-03-10T07:01:38.763 に答える