2016-07-04 21 views
2

私はバインダーを使ってお互いに通信する小さなAndroidアプリケーションを作っています。Android IPCの最大トランザクションサイズ?

私が知っているように、Android Binderは最大トランザクションサイズ(1MB)を持っています。たとえば、アプリケーションがバインダートランザクションを使用して1MBを超えるメッセージを送信しようとすると、TransactionTooLargeExceptionがスローされます。

なぜこれが限定されているのか理解できません。最大トランザクションサイズを制限する理由はありますか? Linux SOCK_STREAMもIPCですが、制限はありません。

制限はありますか? Android文書では、トランザクションサイズを1MBに制限する理由が説明されていないようです(「Binderトランザクションバッファのサイズは限られていますが、なぜバッファを制限するのですか?」)。

フレームワークでIPCサイズが制限されていない場合、重要なケースはありますか?私が知っているように、LinuxはIPCの最大サイズに制限がなくてもうまく動作します。

答えて

0

大量のデータを転送するためにバインダーを使用するのは避けてください。特に古いデバイスでは、他のアプリに影響を及ぼし、さらに重要なことはシステム自体が適切に機能することです。ユーザーインターフェイス、サービスなどの多くのシステムコンポーネントは、Binderにかなり依存しています。

大量のデータを転送するために他の形式のIPCが設計されていることがありますが、これはBinderには当てはまりません。その代わりに、AndroidはBinderを通じてデータに機能を送信するなどの他の方法を提供しています(ファイル記述子、URIなど)。

+1

なぜ、1MBですか? 1MBの制限の理論的根拠はありますか?それは単なる仮定ですか? – DeanStark

関連する問題