私のアプリケーションでは、アクティビティとサービスの間でデータを渡す必要があります。どちらも異なるプロセスにあります。Googleは、インテントを最小限に(フルサイズのビットマップではなく)送信している間、渡されたデータを保持することを推奨していることを知っています。AIDLを介してサービスと通信していて、リモートメソッド呼び出しを介してデータを渡したい場合にも、同様のポリシーが適用されますか?
2 に答える
http://developer.android.com/reference/android/os/TransactionTooLargeException.html
"リモートプロシージャコール中に、引数と呼び出しの戻り値は、Binderトランザクションバッファに格納されているParcelオブジェクトとして転送されます。引数または戻り値が大きすぎてトランザクションバッファに収まらない場合、呼び出しは失敗します。そしてTransactionTooLargeExceptionがスローされます。
バインダートランザクションバッファーの固定サイズは制限されており、現在は1Mbであり、プロセスで進行中のすべてのトランザクションで共有されます。「」
したがって、サイズが1MBを超える引数は絶対に送信しないでください。もちろん、上記のAndroidサイトで説明されているように、サイズの小さい引数でも失敗する可能性があります。
AIDLについてはよくわかりませんが、通常はIntent
余分なものを最小限に抑えたいと考えています。より良い解決策は、独自の実装を行い、それContentProvider
を使用して他のプロセスにデータを提供することです。ContentProvider
これにより、管理されたデータ転送が可能になり、 APIが提供するすべての追加の保護が提供されます。