0

私は2つの方法で使用しているミックスケースIDLサービスを持っています:

  1. このサービスはスレッドを生成し、ネットワーク呼び出しを行って、アクティビティに代わってXMLコンテンツを取得します。コンテンツは、コールバックメソッドを定義するクライアントのIDLを介してアクティビティに戻されます
  2. ユーザーが通知オプションを選択すると、サービスは繰り返し実行されるタイマーを作成し、ツールバー通知を作成します。また、コンテンツをキャッシュしたため、アクティビティが更新を要求すると、別のネットワーク呼び出しではなくキャッシュから提供されます。

だから私の質問は

  1. シナリオ#1の場合、アクティビティで直接バックグラウンドスレッドを作成する代わりに、ネットワークコールにサービスを使用するために支払う価格(ある場合)はどれくらいですか?
  2. #2-実装をAlarmManagerに変更したほうがいいですか?TasKillerでプロセスを強制終了すると、サービスが停止して再起動されないことに気付きました。AlarmManagerベースのジョブの方が回復の可能性が高くなりますか?
4

1 に答える 1

1

シナリオ#1の場合、アクティビティで直接バックグラウンドスレッドを作成する代わりに、ネットワークコールにサービスを使用するために支払う価格(ある場合)はどれくらいですか?

これは「IDLサービス」であるとおっしゃっていたので、これをリモートサービスと呼んでいると思います。つまり、AIDLを使用して、プロセスの境界を越えて使用されているインターフェイスを定義しています。

その場合、コストは2番目のプロセス用のRAMの数MBに加えて、IPCオーバーヘッド用のCPU時間のビットです。その「CPU時間のビット」は、呼び出される頻度によって異なります。

#2-実装をAlarmManagerに変更したほうがいいですか?

一般的に、はい。理想的には、サービスは可能な限りメモリ内にありません。

TasKillerでプロセスを強制終了すると、サービスが停止して再起動されないことに気付きました。AlarmManagerベースのジョブの方が回復の可能性が高くなりますか?

いいえ、「タスクキラー」アプリは、スケジュールされたアラームを含むすべてを強制終了するAPI(Dianne Hackbornの言葉で)を悪用する傾向があるためです。現在、私が知っている「タスクキラー」に対する信頼できる効率的な防御はありません。

于 2009-10-27T13:50:13.077 に答える