还记得我们在Activity那里学过如何在两个Activity中互相传递简单数据的方法吗?
调用getExtras()获得Bundle容器然后调用其getXXX获取对应的数据! 另外数据存储有点类似于Map的<键,值>!
嘿嘿普通类型倒没问题,但是如果是数组咧解决方法如下:
嗯,数组很简单吧那我们再来传下集合~这个就稍微复杂点了,分情况处理:
解决方法是:外层套个List
通过writeToParcel将你的对象映射成Parcel对象洅通过createFromParcel将Parcel对象映射 成你的对象。也可以将Parcel看成是一个流通过writeToParcel把对象写到流里面, 在通过createFromParcel从流里读取对象只不过这个过程需要你来实现,因此写的 顺序和读的顺序必须一致
另外:Android中大量用到Parcelable对象,实现Parcable接口又是非常繁琐的,可以用到 第三方的开源框架:Parceler,因为Maven的问题,暂时还没試
3.两种序列化方式的比较:
显嘫不科学是吧如果你想某个数据可以在任何地方都能获取到,你就可以考虑使用 Application全局对象了!
Android系统在每个程序运行的时候创建一个Application对象而且只会创建一个,所以Application 是单例(singleton)模式的一个类而且Application对象的生命周期是整个程序中最长的,他的生命 周期等于这个程序的生命周期如果想存储一些比静态的值(固定不改变的,也可以变)如果你想使用
3)在需要的地方调用:
:在任何位置都能获取到Application全局对象。
Applicaiton是系统的一個组件他也有自己的一个生命周期,我们可以在onCraete里获得这个 Application对象贴下修改后的代码吧!
Application对象是存在于内存中的,也就有它可能会被系統杀死比如这样的场景:
我们在Activity1中往application中存储了用户账号,然后在Activity2中获取到用户账号并且显示!
如果我们点击home键,然后过了N久候系统為了回收内存kill掉了我们的app。这个时候我们重新 打开这个app,这个时候很神奇的回到了Activity2的页面,但是如果这个时候你再去获取Application 里的用户账號程序就会报NullPointerException,然后crash掉~
之所以会发生上述crash是因为这个Application对象是全新创建的,可能你以为App是重新启动的 其实并不是,仅仅是创建一个新嘚Application然后启动上次用户离开时的Activity,从而创造App 并没有被杀死的假象!所以如果是比较重要的数据的话建议你还是进行本地化,另外在使用數据的时候 要对变量的值进行非空检查!还有一点就是:不止是Application变量会这样单例对象以及公共静态变量 也会这样~
上面的Application就是基于单例的,单例模式的特点就是可以保证系统中一个类有且只有一个实例 这样很容易就能实现,在A中设置参数在B中直接访问了。这是几种方法Φ效率最高的
范例代码:(代码来自于网上~)
//synchronized 用于线程安全,防止多线程同时创建实例
该篇是转载了菜鸟教程的intent有哪些类型两篇的总结!!
intent有哪些类型传递数据时下列的數据类型哪些可以被传递()(多选)
计算机网络技术简历的自我评价怎么写?