Android远程方法数据限制

时间:2011-12-08 16:41:03

标签: android android-binder

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

2 个答案:

答案 0 :(得分:6)

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

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

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

所以看来,你永远不应该发送任何大小超过1MB的参数。当然,如上面的android网站上所解释的那样,你可能会失败的参数较小。

答案 1 :(得分:1)

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