0

Service as Contdown を使用するアプリケーションを開発しています。ユーザーがアクティビティからカウントダウンを開始し、スリープ ボタンが押された後にアクティビティがバックグラウンドになると、このサービスを使用してカウントダウンを続行します。カウントが終了すると、サービスは着信音で通知を表示します。

サービスの時間を「カウント」するには、wait() を使用します。アプリケーションを実際のデバイスでデバッグ モードで使用すると、奇妙な動作が発生します。Eclipse デバッガーが接続されている場合、サービスは正常に動作します。Eclipseデバッガーが接続されていないデバイスでアプリケーションをテストすると、スリープボタンが押されてモニターがアクティブ化されない限り、サービスはカウントダウンが終了したときに通知を表示しません-その後、通知と着信音がアクティブになります。

この奇妙な動作の原因を説明できる人はいますか? おそらく問題は、ウェイクロックまたは同様の構造に関連していますか?

4

2 に答える 2

1

サービスの時間を「カウント」するには、wait() を使用します。

それは貧弱なプログラミングの練習です。RAMを拘束しなくても時間は経過します。

この奇妙な動作の理由を説明できる人はいますか?

デバイスがスリープ状態になりました。これは、バッテリ寿命を節約するための正常で望ましい動作です。USB ケーブルが差し込まれている場合、デバイスはスリープ状態になる必要はありません。また、開発者向けオプションで適切なオプションをチェックした場合、デバイスは差し込まれている間は特にスリープ状態になりません。

ウェイクロックと連動しているのかもしれません

WakeLock時計が刻々と過ぎていくのを見るためにデバイスを起動したままにするためにa を使用しないでください。AlarmManagerカウントダウン期間が終了したら、制御を取得するために使用してください。スタイルのアラームを使用_WAKEUPしてデバイスを起動するように手配できます。BroadcastReceiverその時点で制御を取得すると、「通知と着信音を起動する」ことができます。おまけとして、ユーザーのデバイスでのアプリの動作を改善できるように、サービスを取り除くことができます。

于 2013-03-23T19:24:42.787 に答える
1

wait()デバイスがスリープ状態になった場合、呼び出しが適切な時間待機することは保証されません。代わりに、 AlarmManagerを使用してカウントダウン タイマーをトリガーする必要があります。

于 2013-03-23T19:25:16.127 に答える