Intent注意事项之数据传递

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Intent注意事项之数据传递相关的知识,希望对你有一定的参考价值。

参考技术A Intent是安卓开发里一个比较常用的对象,最简单的我们可以用它来开启一个activity或service,或者发送一个广播,在同一个进程应用里,Intent可以说是安卓四大组件之间沟通的桥梁。

对于这些熟悉的用法,这里不做赘述,这篇目的主要说下Intent的需要注意的一个地方,那就是对于Intent携带数据的问题。

我们都知道Intent可以携带数据,那么究竟可以携带哪些数据呢。

从图上可以看出,Intent可以传递基本的数据类型,以及实现了Serializable和Parcelable接口的数据。

Intent作为数据传输的载体,不止可以实现进程内通信,也可以实现进程间通信,进程间通信的最终都是通过二进制数据进行传输的,那么就要求所携带的数据是可以进行二进制读写的,这点可以参照AIDL的实现方式。

所以对应的数据类型,就只有上面列出的那些,八大基本数据类型以及实现了Serializable和Parcelable接口的数据。

肯定有限制,但不是以讹传讹的40k,我们可以做个试验,最简单的使用Intent在activity之间传递一个Bitmap。

具体的测试过程就不贴了,直接说结论:Intent对数据的大小是有限制的,超过了会报错,这个数据的大小限制在500kb左右,当然是比40k要大的多的,但是这也不能成为我们用Intent来传递大体积数据的理由,之前在项目中遇到过使用Intent来传递一个接口返回List对象,在测试环境未出现问题,切到线上环境才发现大量奔溃,究其原因是因为测试数据量并没有达到Intent的限制,但线上环境数据量则明显超过500k了,作为一个程序员来说,还是不可以心存侥幸,或者说这样的用法完全是应该禁止的。

这是一个很多人都遇到过的问题,解决办法也是各式各样,最简单的方式有用Application传递的,有用单例传递的,实现原理都差不多。下面贴出我自己的实现方式。

存储:

获取:

到这里关于Intent数据传递方面的就说的差不多了,希望能给大家在工作中或是面试的时候带来帮助。

以上是关于Intent注意事项之数据传递的主要内容,如果未能解决你的问题,请参考以下文章

Intent之复杂数据的传递

8.16安卓开发 注意事项

序列化--Serializable与Parcelable

从 Fragment 创建 Intent 并将数据从 Intent 活动传回 Fragment(选项卡式应用程序)

Android :安卓学习笔记之 通过Intent传递类对象(实现Serializable和Parcelable接口)

一起学Android之Intent