activity跳转传递数据问题

领导安排的一个界面添加,显示坐标点和位置,为了不再请求网络,选择传递数据,当时想的是再开启一个Activity,进行显示,由于数据的不确定每个人的坐标点有多少,所以在显示的时候出现的无法打开Activity的情况。为了总结学习,从网络收集进行问题汇总。


借鉴博客:http://blog.csdn.net/wave_1102/article/details/51067106

    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0204/2410.html

    http://www.jianshu.com/p/a60b609ec7e7


传递大数据问题:

官方文档提到 TransactionTooLargeException异常,“The Binder transaction failed because it was too large.”即传输数据过大异常。
并且提到这样一句话:“ Parcel  objects stored in the Binder transaction buffe ”,这表明实际上底层parcel对象在不同activity直接传递过程中保存在一个叫做“ Binder transaction buffe”的地方,既然是缓冲区,肯定有大小限制。
官方文档还提到
The Binder transaction buffer has a limited fixed size, currently 1Mb, which is shared by all transactions in progress for the process. Consequently this exception can be thrown when there are many transactions in progress even when most of the individual transactions are of moderate size.
即缓冲区最大1MB,并且这是该进程中所有正在进行中的传输对象所公用的。至于都有哪些传输对象、具体怎么分配,这个还不太清楚。可以肯定的是Activity之间使用Parcel传输数据是有大小限制的。那么在传输大小可能很大的情况下就要做点处理了。

常用的跳转传递数据有:

1.intent.putExtra(key,value); 获取数据:intent.getStringExtra(key);

2.bundle.putString(key,value); 获取数据:bundle = this.getIntent().getExtras();   bundle.getString(key);

   intent.putExtras(bundle);

3.startActivityForResult(),这个和上面基本一样

那么在传递大一点数据的情况:

比如传递list,发现都是arraylist



发现parcelable 和 serializable这两种list数据

区别:

1.serializable的迷人之处在于你只需要对某个类以及它的属性实现Serializable 接口即可。Serializable 接口是一种标识接口(marker interface),这意味着无需实现方法,Java便会对这个对象进行高效的序列化操作。这种方法的缺点是使用了反射,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。

2.根据 google 工程师的说法,原因之一就是我们已经清楚地知道了序列化的过程,而不需要使用反射来推断。同时为了更快地进行序列化,对象的代码也需要高度优化。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值