2011-06-29 3 views
4

サービスがデバイスに与えるフットプリントを最小限に抑えるために、プログラムでできることは何ですか?多くのシステムメモリを消費しないようにサービスを作成する方法に特別なトリックはありますか?私はメモリの足跡が少ないことが私の主な関心事だと思うので、ユーザーはサービスをオフにしたくないし、いつもそれを稼働させたいと思っている。Androidで実行されているサービスを最適化する方法は何ですか?

***EDIT ***

わかりましたので、私は "メートル私はこの間違っているしなければならないことを考えて答えを読んだ。私は定期的にサービスを覚ますためにAlarmManagerを使用していますが、ユーザーが主なアクティビティを介して指示しない限り、サービスを停止することはありません。サービスが実行された後、onStartCommandの最後にstopServiceを呼び出す必要がありますか?サービス呼び出しを停止しないonDestroy onDestroyで私のAlarmManagerの登録を解除しました。

私の電話機でサービスを実行しているときにサービスが実行されているときに実行される方法ですが、実際に何もしていないのは、AlarmManagerが消えてから小さな機能を実行する時点までです。

+0

常に実行する必要がありますか?必要な場合にのみ、AlarmManagerを使用してブロードキャストを受信して​​サービスを開始できますか?あなたのサービスは何ですか? – likebobby

+0

「常に稼働している」サービスが必要なケースも少なく、面白​​くないケースもあります。サービスは@alextscが示すようなタスクであるか、ユーザーがフォアグラウンドのもの(音楽プレーヤーなど)を開始したり停止したりするものです。サービスが「常に稼働している」必要がある明確な技術的理由があることを私たちに納得させることができない限り、私はそれを避けることをお勧めします。 – CommonsWare

+0

これまでのコメントと回答に対処するために私のオリジナルの質問を編集しました。 – ihtkwot

答えて

2

私は、低メモリフットプリントは、ユーザがサービスをオフにしたくないように、私の主な関心事であり、それは常に実行されていて喜んでいると思います。

最適化のために巨大なものです。アンドロイドサービスは、WindowsサービスやUnixデーモンのように、常に実行されるものではありません。 これらは、タスクソルバーのようなものです。ファイルをダウンロードしてください。タスクが終了したら、Service.stopSelf()を呼び出す必要があります。 サービスが再度必要な場合は、サービスを再起動してから適切なタスクを実行する必要があります。

+0

これまでのコメントと回答に対処するために私のオリジナルの質問を編集しました。 – ihtkwot

+0

編集への応答:おい、基本的に正しいことが正しい方向です。 AlarmManagerを介して定期的にサービスを開始するのは問題ありません。サービスが自分の仕事を終えたら、onStartCommand()の中でstopSelf()を呼び出す必要があります。これによりonDestroy()が呼び出され、クリーンアップ(必要な場合)を行うことができます。ユーザーが説明したようにサービスの通常の開始を無効にできる必要がある場合は、ユーザーが関連するコントロール(たとえばボタン)をクリックしたときに保留中のインテントをAlarmManagerから削除するだけです。 –

+0

さて、stopSelfを呼び出すと、私が設定したAlarmManager通知を破棄したいのですか?だから、基本的には、ユーザが目が覚めているサービスに興味がなくなったことをユーザが示したときに、AlarmManagerからpendingWebsiteIntentを削除するだけです。それ以外の場合は、onStartCommandの終了後にstopSelfを呼び出し、アラームをキャンセルしませんか? – ihtkwot

2

実際にあなたのサービスがの場合はとなりますので、正解か間違った答えが実際にはありません。私が気をつけようとしている重要なことは、必要以上に長い間サービスを生かし続けることではありません。サービスがアイドル状態で大部分の時間を費やしている場合は、アラームで定期的に起床し、定期的な作業が完了したらサービスを停止することを検討してください。これは、多くのタスクキラーが非常に長い間実行されていない場合、あなたのサービスを破壊するのを防ぐという追加の利点があります。

また、これらは一般的に電池に優しいので、不正確なアラームを試してみてください。また、電池の寿命も注意してください。

メモリフットプリントの点では、未使用のリソースを解放し、サービス、アクティビティ、レシーバ、その他のどこにいても、できる限りコードを細かく保つ価値がある常にです。現在のスマートフォンはフィーチャーフォンよりもかなり多くのメモリを搭載していますが、Androidは比較的低スペックのハードウェア上で動作するようになっています。したがって、ローエンドのデバイスには注意が必要です。

Reto Meierは最近、his blogにこれらの種類のトピックをカバーする記事を書いています。

+0

コメントとこれまでの回答。 – ihtkwot