Android 跨进程大数据传输,跨进程传递大图怎么破?

我们平时应用开发跨进程传递数据这个是经常有但是传递的数据量很大甚至超过了允许的最大值导致抛异常这个可能不那么常见。比如发了一个很长的列表或者一个很大的字符串或者发了一张大图都有可能出现异常。

这个问题虽然不常见但是一旦出现一般都很棘手而且一定要解决的啊。我们怎么解决呢怎么样才能突破这个限制呢这是个问题啊我们接下来就来讨论这个问题。

跨进程传递大图我们能想到哪些方案呢

最容易想到的一种就是先给图片保存到文件给路径跨进程传过去对方再从文件给图片decode出来这个方案是可行就是性能不怎么样你能想象我传个大图要好几秒么。

另一种方案就是通过跨进程通信的方式就是不走文件直接走内存这个肯定会快不少。跨进程通信有哪些方式呢

首先Binder性能是可以用起来也方便但是有大小的限制传的数据量大了就会抛异常。Socket或者管道性能不太好涉及到至少两次拷贝。共享内存性能还不错可以考虑关键看怎么实现。总之呢性能是重点考虑的因素。

我们来看通过Binder传图有几种方案一个是通过Intent传图还一个可以通过Binder调用传图。有人说了这两个不是一回事吗通过Intent传图在启动应用组件的时候还不是一个Binder调用但是你试试就会知道通过Intent传大图可能会抛TransactionTooLargeException异常但是通过普通的Binder调用传图就没事这是为什么呢我们来研究一下。

先看Intent传图哈Bundle b = new Bundle();

b.putParcelable("bitmap", mBitmap);

intent.putExtras(b);

再看Binder调用传图Bundle b = new Bundle();

b.putBinder(“binder”, new IRemoteCaller.Stub() {

@Override

public Bitmap getBitmap() {

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值