Android-バックグラウンドサービスを使用する
-
06-07-2019 - |
質問
私は2つの方法で使用しているミックスケースIDLサービスを持っています:
- サービスはスレッドを生成し、アクティビティに代わっていくつかのXMLコンテンツを取得するためのネットワーク呼び出しを行います。コンテンツは、コールバックメソッドを定義するクライアントのIDLを介してアクティビティに返されます
- ユーザーが通知オプションを選択した場合、サービスは繰り返し実行されるタイマーを作成し、ツールバー通知を作成します。また、コンテンツをキャッシュしたため、アクティビティが更新を要求すると、別のネットワーク呼び出しではなくキャッシュから提供されます
だから私の質問は
- シナリオ#1の場合、アクティビティで直接バックグラウンドスレッドを作成する代わりに、ネットワークコールにサービスを使用するために支払う価格(ある場合)は何ですか?
- #2の場合-実装をAlarmManagerに変更した方が良いですか? TasKillerでプロセスを強制終了するとサービスが停止し、再起動されない場合、AlarmManagerベースのジョブが回復する可能性が高くなることに気付きました。
解決
シナリオ#1の場合、価格はいくらですか(if any)私はのためにサービスを使用するために支払っています 作成する代わりにネットワーク呼び出し バックグラウンドスレッドで直接 アクティビティ?
これは「IDLサービス」だと言っているので、これをリモートサービスと呼んでいると思います-AIDLを使用して、プロセスの境界を越えて使用されるインターフェイスを定義しています。
その場合、コストは2番目のプロセスのRAMの数MBに加えて、IPCオーバーヘッドのためのCPU時間のビットです。その「CPU時間のビット」の量呼び出される頻度に依存します。
#2の場合-変更する方が良い AlarmManagerへの実装?
通常、はい。理想的には、サービスは可能な限りメモリ内にありません。
プロセスを強制終了すると、 TasKillerを使用すると、サービスが停止し、 再起動することはありません AlarmManagerベースのジョブの方が優れています 回復のチャンス?
いいえ、「タスクキラー」だからですアプリは(ダイアンハックボーンの言葉で)APIを悪用し、スケジュールされたアラームを含むすべてを殺す傾向があります。現在、信頼できる&はありません。 「タスクキラー」に対する効率的な防御私が知っていること。
所属していません StackOverflow