Intent 数据传递 总结
系统API
可以传递的数据类型
1、传递8大基本类型+String+CharSequence及其数组类型2、传递ArrayList集合public Intent putIntegerArrayListExtra(String name, ArrayList<Integer> value)public Intent putStringArrayListExtra(String name, ArrayList<String> value)public Intent putCharSequenceArrayListExtra(String name, ArrayList<CharSequence> value)public Intent putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)3、传递普通对象1)将对象转换为Json字符串intent.putExtra("book",new Gson().toJson(book));Book book=new Gson().fromJson(getIntent().getStringExtra("book"),Book.class);2)使用Serializable、Parcelable序列化对象(注意:BitMap默认实现Parcelable接口)public Intent putExtra(String name, Parcelable value)public Intent putExtra(String name, Parcelable[] value)本质上,以上都是通过Bundle进行传递的。private Bundle mExtras;public Intent putExtra(String name, int value) {if (mExtras == null) mExtras = new Bundle();mExtras.putInt(name, value);return this;}public Intent putExtra(String name, int[] value) {if (mExtras == null) mExtras = new Bundle();mExtras.putIntArray(name, value);return this;}
全局变量
传来传去不方便,直接定义全局数据如果想某个数据可以在任何地方都能获取到,可以考虑使用Application全局对象!Android系统在每个程序运行的时候创建一个Application对象,而且只会创建一个,所以Application是单例模式的一个类,而且Application对象的生命周期是整个程序中最长的,他的生命周期等于这个程序的生命周期。在任意地方,我们都可以通过MyApp.getInstance()来获得Application的全局对象!注意事项:Application对象是存在于内存中的,也就有它可能会被系统杀死,比如这样的场景:我们在Activity1中往application中存储了用户账号,然后在Activity2中获取到用户账号,并且显示!如果我们点击home键,然后过了N久后,系统为了回收内存kill掉了我们的app。这个时候,我们重新打开这个app,这个时候很神奇的,回到了Activity2的页面,但是如果这个时候你再去获取Application里的用户账号,程序就会报NullPointerException。之所以会发生上述crash,是因为这个Application对象是全新创建的,可能你以为App是重新启动的,其实并不是,仅仅是创建了一个新的Application,然后启动上次用户离开时的Activity,从而创造App并没有被杀死的假象!所以如果是比较重要的数据的话,建议你还是进行本地化。另外在使用数据的时候要对变量的值进行非空检查!还有一点就是:不止是Application变量会这样,单例对象以及公共静态变量也会这样~单例模式传参上面的Application就是基于单例的,单例模式的特点就是可以保证系统中一个类有且只有一个实例,这样很容易就能实现在A中设置参数,在B中直接访问了。这是几种方法中效率最高的。
序列化对象
1、Serializable实现步骤
- ①业务Bean实现Serializable接口,写上getter和setter方法
- ②Intent通过调用putExtra(String name, Serializable value)传入对象实例,当然对象有多个的话,我们也可以先Bundle.putSerializable(x,x);
- ③ Intent通过调用getSerializableExtra()方法获得对象实例
- ④调用对象get方法获得相应参数
2、Parcelable实现步骤
- ①业务Bean实现Parcelable接口,重写writeToParcel方法,将你的对象序列化为一个Parcel对象
- ②重写describeContents方法,内容接口描述,默认返回0就可以了
- ③实例化Parcelable.Creator<T> 类型的静态内部对象CREATOR,实现接口Parcelable.Creator,重写createFromParcel方法和newArray方法
- ④同样式通过Intent的putExtra()方法传入对象实例,或通过Bundle传递多个实例
3、Serializable,Parcelable这两种序列化方式的比较
- a)在使用内存方面,Parcelable比Serializable性能高,所以推荐使用Parcelable。
- b)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
- c)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性,在外界有变化的情况下,建议使用Serializable。
Intent 数据传递 总结的更多相关文章
- 转-Activity之间数据传递之Intent数据传递
Intent意图 可用于Activity之间的数据传递,一般可分为下面两种情况,从当前Activity传递到目标Activity后有无返回值: 1.传递后无返回值的情况: 1 2 3 4 5 6 7 ...
- Intent数据传递
(1)首先是Activity的简单跳转: 1).Activity的切换一般是通过Intent来实现的,Intent是一个Activity到达另一个Activity的引路者,它描述了起点(当前Activ ...
- (Android数据传递)Intent消息传递机制 “Intent”“数据传递”
Intent类的继承关系: 需要注意的是,该类实现了Parcelable(用于数据传递)和Cloneable接口. Intent是一种(系统级别的)消息传递机制,可以在应用程序内使用,也可以在应用 ...
- intent--Activity之间数据传递之Intent数据传递
intent传值: 4,intent传集合 3,intent传对象, 2,传递后有返回值的情况:当需要从目标Activity回传数据到原Activity时,可以使用上述方法定义一个新的Intent来传 ...
- android Activity之间数据传递 Parcelable和Serializable接口的使用
Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去.传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口.0.解 ...
- Android Intent不可传递大数据
今天用intent传递一个bitmap,结果一直出错,intent无法执行,原来是intent不能传递大数据导致的,具体是多大,不太清楚,但我传递的bitmap在1m以上.
- 安卓开发-intent在Activity之间数据传递
安卓开发-intent在Activity之间数据传递 [TOC] intent实现普通跳转 使用intent的setclass方法,示例(由此界面跳转到NewActivity界面) //使用setOn ...
- Activity系列讲解---数据传递
在Android中,不同的Activity实例可能运行在一个进程中,也可能运行在不同的进程中.因此需要一种特别的机制帮助我们在Activity之间传递消息.Android中通过Intent对象来表示一 ...
- android第一行代码-3.activity之间的调用跟数据传递
前面两节所有应用都是同一个activity中的,是时候讲activity之间交互的操作了,此后会涉及到intent这个概念,这也算一个新的里程碑开始. 主要内容包括intent的使用,以及activi ...
随机推荐
- 动态脚本,在js里面又写js
不知道怎么回事 代码测试不过 var a=document.createElement("script"); a.type="text/javascript"; ...
- Dev-C++程序正确闪退问题
只需要在主函数最后一句语句上面加一句getchar();即可
- golang byte转string 字节数组转字符串的问题
golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上 ...
- kafka教程
一.理论介绍(一)相关资料1.官方资料,非常详细: http://kafka.apache.org/documentation.html#quickstart2.有一篇翻译版,基本一致,有些细节不 ...
- 关于js闭包杂记
闭包:一个函数oneF里return了另一个函数innerF,然后在oneF外面运行了函数innerF,如果innerF里有用到在oneF里定义的变量,则此时依然可以引用到, 但是变量值不是定义函数i ...
- Thinkphp 连接数据库、查询、添加
一.连接数据库配置及Model数据模型层 1. Thinkphp\conf\convertion.php中找到数据库设置部分,复制到自己的配置文件中,并添加好有关数据库的内容 JiaoWu\Home\ ...
- Memcached使用手册
memcached简介 1.memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果 ...
- TOP 100 MISSPELT/MISSPELLED WORDS IN ENGLISH
acceptable accidentally accommodate acquire acquit a lot amateur apparent argument atheist believe ...
- TextView 超链接点击跳转到下一个Activity
1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
- assets文件夹资源的访问
访问assets文件夹中的文件,分为以下几个步骤:1.在Activity里面调用getAssets(),获取AssetManager引用2.调用AssetManager.open(String fil ...
