3

对于我的应用程序,我需要在我的活动和服务之间传递数据,这两者都在不同的进程中。我知道 Google 建议在将意图发送到最低限度(不是全尺寸位图)时保持数据传递。当您通过 AIDL 与服务通信并希望通过远程方法调用传递数据时,是否适用类似的策略?

4

2 回答 2

8

http://developer.android.com/reference/android/os/TransactionTooLargeException.html

" 在远程过程调用期间,调用的参数和返回值作为 Parcel 对象传输,存储在 Binder 事务缓冲区中。如果参数或返回值太大而无法放入事务缓冲区,则调用将失败和 TransactionTooLargeException 将被抛出。

Binder 事务缓冲区有一个有限的固定大小,目前为 1Mb,由进程正在进行的所有事务共享。"

所以看起来,你永远不应该发送任何大小超过 1MB 的参数。当然,如上面的 android 网站所述,您也可能因较小的参数而失败。

于 2011-12-28T14:27:37.687 回答
1

我不确定 AIDL,但通常您确实希望将Intent额外内容保持在最低限度。更好的解决方案可能是实现您自己的解决方案ContentProvider并使用它为您的其他流程提供数据。这将允许托管数据传输,并为您ContentProvider提供 API 提供的所有额外保护。

于 2011-12-08T16:45:15.317 回答