为了我的应用程序,我需要在不同进程中的活动和服务之间传递数据。我知道Google建议在发送意图时尽量减少传递的数据(不包括完整大小的位图)。当您通过AIDL与服务通信并希望通过远程方法调用传递数据时,是否适用类似的策略?
为了我的应用程序,我需要在不同进程中的活动和服务之间传递数据。我知道Google建议在发送意图时尽量减少传递的数据(不包括完整大小的位图)。当您通过AIDL与服务通信并希望通过远程方法调用传递数据时,是否适用类似的策略?
http://developer.android.com/reference/android/os/TransactionTooLargeException.html
在远程过程调用期间,调用的参数和返回值作为存储在Binder事务缓冲区中的Parcel对象进行传递。如果参数或返回值太大而无法放入事务缓冲区中,则调用将失败,并且将抛出TransactionTooLargeException异常。
Binder事务缓冲区具有有限的固定尺寸,目前为1MB,由进程中正在进行的所有事务共享。
所以看起来,您不应该发送任何大小超过1MB的参数。当然,如果参数过小也会导致失败,如上面的android网站所解释的那样。
我不确定AIDL,但通常你确实希望尽量减少Intent
extras。更好的解决方案可能是实现自己的ContentProvider
并使用它来向其他进程提供数据。这将允许进行受控数据传输,并为您提供ContentProvider
API提供的所有额外保护。
BroadcastReceiver
和ContentProvider
来管理此事务。 - Codeman