48

ウェイクロックについて質問です。以下に示す場合、Android OS はウェイクロックを解放し (PARTIAL_WAKE_LOCK指定する必要がある場合)、ウェイクロックが取得されたままになり、電源をオフにする (スリープしない) までバッテリーを浪費するのを防ぎます。

ケース 1-a:
アプリがスレッドの 1 つで (タイムアウト オプションなしで) ウェイクロックを取得し (この場合は妥当であると考えてください)、重要なタスクが終了したときにウェイクロックを解放するように設計されています。アプリはタスクマネージャーまたは悪名高いタスクキラーによって強制終了される可能性があり、アプリはそのスレッドがウェイクロックを解放する機会がありません。そのウェイクロックはどうなりますか?

ケース 1-b:
(ケース 1-a に対する回答が「はい、心配しないでください」の場合、このケースは無視してください。) ケース 1-a と同じですが、アプリはウェイクロックにタイムアウト オプションを与えました。たとえば 3 秒です。このタイムアウト オプションは有効に保たれていますか?

ケース 2-a:
AlarmManager によって (ブロードキャスト レシーバー経由で) 開始されたサービスがあり、そのサービスがウェイクロックを取得した (タイムアウト オプションなし) と想像してください。このサービスは、ウェイクロックの取得時間を最小限に抑えるように設計されています。しかし、残念なことに、Android OS は、メモリ不足のためにこのサービスを強制終了することを選択しました。(OS が wakelock を取得したときにサービスを kill しないかどうかはわかりませんが、OS は気にしないと思います。ただし、OS が後で wakelock を解放してくれることを願っています。) その wakelock はどうなりますか?

ケース 2-b:
(ケース 2-a に対する回答が「はい、心配しないでください」の場合は、このケースを無視してください。) ケース 2-a と同じですが、サービスはウェイクロックにタイムアウト オプションを与えました。たとえば 3 秒です。このタイムアウト オプションは有効に保たれていますか?

4

2 に答える 2

6

私は(これは確かにわかりませんが)Androidシステムは強制終了されたプロセスのウェイクロックを保持していないと思います。ほとんどの場合、sigkillを使用してプロセスを強制終了すると、そのプロセスによって保持されているウェイクロックもすべて削除されます。

そうでなければ、あなたが言うように、クラッシュは電話が常に起きていることにつながるでしょう、それは私が観察していませんでした。

于 2011-04-05T07:54:26.817 に答える