2011-10-26 9 views
0

私は、バックグラウンドでいくつかのことをするために頻繁な間隔で(毎分1回)起きるアプリケーションを持っています。私はAlarmManagerを使って起床を予定しています。サービスアーキテクチャー、連続稼働と復帰

私は、バックグラウンド作業を行うためにServiceを構成する2つの異なる方法で探しています:

  1. は連続setForeground()とフォアグラウンドで実行されているサービスを維持します。これは、アプリケーション状態が起床間のメモリに残るため、魅力的です。
  2. stopSelf()を使用して、バックグラウンドタスクの実行が完了した後でServiceを破棄します。これは、それぞれの目覚めの間にいくつかの重要でないオブジェクトを永続させる必要があります。

各アプローチの長所と短所は何ですか?持続性はどれくらいのコストがかかりますか?ケース2のストレージに推奨されるアプローチは何ですか?

答えて

0

私は目覚ましをスケジュールするためにAlarmManagerを使用します。

がうまくいけば、あなたはオプション#1と一緒に行くされているわけではない場合。とにかくサービスがすべて実行される場合は、Timerを使用してください。

各アプローチの長所と短所は何ですか?

setForeground()は、あまり時間がかかりません。 startForeground()が動作しますが、アクティブなNotificationが必要です。

AlarmManagerIntentServiceに切り替えることを検討すると、1分間のポーリング周期が短くなります。つまり、1分のポーリングサイクルは非常に頻繁です。私は、あなたが「投票しないでください、私はUIを通して更新をリクエストします」というオプションを含め、これをユーザーが設定可能にすることを強くお勧めします。

これは、それぞれの目覚ましの間にいくつかの重要でないオブジェクトを永続させる必要があります。

あなたはどちらの場合も、それらのオブジェクトを永続化する必要があります。たとえば、ユーザーがタスクキラーを使用してオプション1のサービスを攻撃した場合、データが失われていないといいでしょう。

持続性がどのようにコストがかかるのですか?

どちらの場合でもこれらのオブジェクトを永続化する必要があるため、実際には問題ありません。

ケース2のストレージに推奨されるアプローチは何ですか?

これは要約では答えることができません。

0

あなたは間違いなくオプション2に行き、完了したらサービスを停止します。あなたがシステムリソース、すなわちバッテリーを使い続けるためにあなたが走っていることを続けているなら。あなたがしなければならないことをしてから、サービスをやめる。また、毎分どのような目覚めをしていますか?フル・アウト・デバイス・ウェークアップ(RTC_WAKEUP)を実行している場合は、デバイス・バッテリーをもう一度killすることになります。

私は、これは横柄な音はありません願っていますが、私は一度devloperが言うのを聞いた、「アンドロイドと戦うしないでください、アンドロイドは勝ちます」。サービスをフォアグラウンドに設定しようとしているときは、使用されていないリソースをクリーンアップしようとするアンドロイドの試みと戦っています。あなたは代わりにアンドロイドを受け入れるべきです。できるだけ非同期で処理してください。それはアンドロイドの方法です。

+0

お返事ありがとうございます。これは覚えておくと良い見積もりです。 – Michael

関連する問題