バッテリー寿命を延ばすために、画面がオンのときにのみアクティブになるAndroidウィジェットを作成しています。
まず、「ウィジェット」とは「アプリ ウィジェット」を意味すると仮定します。
次に、アプリ ウィジェットが「アクティブ」になることはありません。
そのため、常に実行され、ACTION_SCREEN_ON と ACTION_SCREEN_OFF に反応するサービスが 1 つあります。
これは良い考えではありません。まず、プロセスを維持することで、メガバイトの RAM を浪費します。第 2 に、Android ではサービスを「常時実行」できないため、機能しません。最終的にはサービスが古いためにシャットダウンされます。第三に、ユーザーはあなたのようなサービスを常に実行している開発者に苛立ち、タスク キラー (Android 2.1 以下) を使用するか、設定アプリケーションの [サービスの管理] 画面 (Android 2.0 以降) を使用してサービスを停止します。 )。
画面がオフになったら、他のブロードキャストレシーバーの登録を解除し、画面がオンになったら再度登録します。
「他のブロードキャストレシーバー」が何であるかわかりません。それらはおそらく最初から登録されるべきではありません。
私の質問は、バッテリー寿命に関して、画面がオフになったときに行うベストプラクティスは何ですか. ブロードキャスト レシーバー変数 (つまり、m_Receiver = null;) も削除する方が良いですか、それとも登録解除で十分ですか? 削除すると、システムの空きメモリが増えますが、ガベージコレクションと余分なメモリ操作(画面がオンになったときに新しいレシーバーを作成する必要があります)が発生し、費用がかかります...
サービスにどれだけのメモリを割り当てているかを考えると、これについて心配するのは無意味です。永遠の奉仕を取り除くことに集中してください。
たとえば、このアプリ ウィジェットがバッテリー レベルを表示しているとします。監視している永遠のサービスを持っていませんACTION_BATTERY_CHANGED
。代わりに、ユーザーにポーリング間隔 (たとえば、5 分ごとに 1 回) を選択させ、AlarmManager
定期的にバッテリー レベルをチェックするために使用します。