Android TimerTask (私は信じています) で私を夢中にさせている問題を特定するのに苦労しています。
シナリオは次のとおりです。電話をかけた後、PhoneStateListener を使用してタイマーを開始し、特定の通話時間後にサウンドを再生します。
すべてが完璧に動作しますが、デバッグ モードにしないと (または単に電話をコンピューターに接続したままにする)、サウンドが常に鳴るとは限りません。
私の最大の問題は、問題を明確に特定できないことです。これは、電話のプラグが抜かれ、ログを読み取れない場合にのみ発生するためです。問題を 1 回だけ再現し (呼び出し後に音が出ない)、それに関するログを読んだところ、onCallStateChanged が呼び出され、Timer は OK でしたが、TimerTask は呼び出されなかった (またはスケジュールされていなかった) ことに気付きました。
ここでいくつかの質問を読んだ後、タイマーの代わりにハンドラーを使用しました。しかし、私はまったく同じ問題を抱えています。実際、ハンドラーを使用すると、電話機のプラグを抜き差しするだけで、この問題を再現するのがはるかに簡単になります (タイマーを使用すると、音が出ない問題を再現するのがより難しくなりました)。
私は間違ったことをしていますか、それとも何か他のものを実装する必要がありますか?
コメントをお待ちしております。
編集
どうやら、ハンドラーを使用すると、通話が開始されるとすぐに電話がスリープ状態になるため、これが発生します。ただし、これを防ぐために wake_lock を使用しても機能しません。電話がスリープ状態のときにスレッドを実行する別の方法はありますか?