6

私のチームは、(同じ電話で) データを交換する複数の Android アプリケーションで構成される Android プロジェクトに取り組んでいます。アイデアは、いくつかのデータを収集し、このデータをメインアプリケーションに送信するいくつかのアプリケーションを持つことです。ここでの主な課題は、CPU 負荷とバッテリー使用量の観点から、交換をできるだけ安く行うことです。

私の知る限り、プロセス間通信を実現するには 2 つの方法があります。

  1. インテントとアクティビティ - あるアクティビティが別のアクティビティのインテントをキャッチ
  2. リモート メソッド (AIDL 経由)

次のシナリオでは、どちらがより効率的か疑問に思います。

  1. 非常に頻繁なメッセージ/メソッド呼び出しで、送信されるデータ/トラフィックが非常に少ない (例: 一連のプリミティブを渡すだけ)
  2. トラフィック チャンクが大きく、メッセージ/メソッド呼び出しの頻度が低い (例: データを収集し、定期的に数 KB/MB のデータを送信する)
  3. 大きなデータ チャンクが交換される非常に頻繁なメッセージ/メソッド呼び出し

比較またはベンチマークへの参照/リンクのいずれかの点で、助けていただければ幸いです。

4

3 に答える 3

2

1) にはリモート サービスを使用するのが最適であり、2) と 3) にはファイルまたはデータベースに書き込む方がよいと思います。インテントは、まれなプロセス間通信と、アプリやサービスの開始を目的としています。

于 2011-02-16T12:37:45.967 に答える
1

代替オプションとして、ネイティブコードを使用して共有メモリを作成することもできます。詳細については、このリンクを確認してください: http ://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html

于 2011-02-16T13:25:49.193 に答える
1

シナリオ 3) に対処するには、 Unix ドメイン ソケットメカニズムを使用することをお勧めします。頻度が高いとファイル/データベースの使用が複雑になります。この回答によると、すべてのオブジェクトをパーセルに変換する (およびパーセルから戻す) 必要があるため、Android の IPC を使用することはパフォーマンス上推奨されません。も Unix パイプを使用しますが、いくつかの制限があります。

于 2013-08-12T10:44:15.623 に答える