1

バッテリー寿命を延ばすために、画面がオンのときにのみアクティブになるAndroidウィジェットを作成しています。そのため、常に実行され、ACTION_SCREEN_ON と ACTION_SCREEN_OFF に反応するサービスが 1 つあります。画面がオフになったら、他のブロードキャストレシーバーの登録を解除し、画面がオンになったら再度登録します。

私の質問は、バッテリー寿命に関して、画面がオフになったときに行うベストプラクティスは何ですか. ブロードキャスト レシーバー変数 (つまり、m_Receiver = null;) も削除する方が良いですか、それとも登録解除で十分ですか? 削除すると、システムの空きメモリが増えますが、ガベージコレクションと余分なメモリ操作(画面がオンになったときに新しいレシーバーを作成する必要があります)が発生し、費用がかかります...

4

1 に答える 1

0

バッテリー寿命を延ばすために、画面がオンのときにのみアクティブになる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定期的にバッテリー レベルをチェックするために使用します。

于 2011-03-27T10:54:02.333 に答える