4

フォアグラウンド サービスの動作が "殺される可能性は低い" ことはわかっています。Androidのドキュメントによると:

理論的には、現在のフォアグラウンド アプリケーションからの極度のメモリ プレッシャの下でサービスが強制終了される可能性はありますが、実際にはこれは問題になりません。

これにより、ほとんどの場合、メモリ不足の問題が解決されると思います。しかし、フォアグラウンド サービスの実行中に CPU がスリープ状態になるかどうかに関するドキュメントは見つかりません。

  1. フォアグラウンド サービスは自動的にPARTIAL_WAKE_LOCKを取得しますか、それとも必要に応じて明示的に呼び出す必要がありますか?

  2. PARTIAL_WAKE_LOCK を使用しているアプリケーション/サービスを確認/ログする方法はありますか?

4

1 に答える 1

2

AndroidフォアグラウンドサービスとPARTIAL_WAKE_LOCKは互いに何の関係もありません。

フォアグラウンド サービス -> サービスを最優先キューに入れるよう OS に指示します。OS が何らかの理由でメモリを必要とする場合、サービスは最後に強制終了され、最も低い優先度のキューから開始されます (5 つの優先度のキューがあり、フォアグラウンドが最も高いと思います)。

PARTIAL_WAKE_LOCK -> デバイスがスリープ状態になったときに (これが発生するたびに) CPU をスリープ状態にしないように OS に指示します。

したがって、フォアグラウンド サービスがある場合でも、デバイスがスリープ状態になると、CPU もスリープ状態になる可能性があります (他のアプリが PARTIAL_WAKE_LOCK を取得した場合はそうではない可能性があります)。どのアプリケーションがウェイクロックをプログラムで取得したかを確認する方法はないと思いますが、デバイスを DDMS に接続すると、誰かが wake_lock を取得したときに PowerManager のログが表示されます。

それが役に立てば幸い !

于 2012-11-15T00:48:34.233 に答える