Android 通过Intent使用Bundle传递对象

Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。

被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable

Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。

两种序列化方式的区别:

1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;

2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;

3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,

这种情况建议使用Serializable。

第一步:定义序列化实体类;

Serializable方式:

/**

* PersonSer

*

* @author http://blog.csdn.net/zuolongsnail

*/

public class PersonSer implements Serializable {

/**

* serialVersionUID的作用是在修改实体类后,可以正常的序列化和反序列化,在此不多说,大家可以谷歌百度下。

*/

private static final long serialVersionUID = -7620435178023928252L;

private String name;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

Parcelable方式:

/**

* PersonPar

*

* @author http://blog.csdn.net/zuolongsnail

*/

public class PersonPar implements Parcelable {

private String name;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

/**

* 序列化实体类

*/

public static final Parcelable.Creator CREATOR = new Creator() {

public PersonPar createFromParcel(Parcel source) {

PersonPar personPar = new PersonPar();

personPar.name = source.readString();

personPar.age = source.readInt();

return personPar;

}

public PersonPar[] newArray(int size) {

return new PersonPar[size];

}

};

@Override

public int describeContents() {

return 0;

}

/**

* 将实体类数据写入Parcel

*/

@Override

public void writeToParcel(Parcel parcel, int flags) {

parcel.writeString(name);

parcel.writeInt(age);

}

}

第二步:传递序列化对象;

Intent intent = new Intent(MainActivity.this, DestActivity.class);

Bundle bundle = new Bundle();

switch (v.getId()) {

case R.id.serializable_btn:

// Serializable传递对象

PersonSer personSer = new PersonSer();

personSer.setName("zuolong");

personSer.setAge(26);

bundle.putSerializable(SER_KEY, personSer);

intent.putExtra("type", SER_TYPE);

intent.putExtras(bundle);

startActivity(intent);

break;

case R.id.parcelable_btn:

// Parcelable传递对象

PersonPar personPar = new PersonPar();

personPar.setName("snail");

personPar.setAge(27);

// Bundle有putParcelableArray和putParcelableArrayList方法,也就可以传递数组和列表

bundle.putParcelable(PAR_KEY, personPar);

intent.putExtra("type", PAR_TYPE);

// Intent也有putParcelableArrayListExtra方法,可以传递实现Parcelable接口的对象列表

intent.putExtras(bundle);

startActivity(intent);

break;

}

第三步:获取对象;

StringBuffer sb = new StringBuffer();

String type = getIntent().getStringExtra("type");

// 根据type判断是哪种类型

if (type.equals(MainActivity.SER_TYPE)) {

// 获取Serializable对象

PersonSer personSer = (PersonSer) getIntent().getSerializableExtra(

MainActivity.SER_KEY);

sb.append("----From Serializable----").append("\n");

sb.append("Name:").append(personSer.getName()).append("\n");

sb.append("Age:").append(personSer.getAge()).append("\n");

} else if (type.equals(MainActivity.PAR_TYPE)) {

// 获取Parcelable对象

PersonPar personPar = (PersonPar) getIntent().getParcelableExtra(

MainActivity.PAR_KEY);

sb.append("----From Parcelable----").append("\n");

sb.append("Name:").append(personPar.getName()).append("\n");

sb.append("Age:").append(personPar.getAge()).append("\n");

}

附源码:下载地址

运行结果截图:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java intent bundle_Android 通过Intent使用Bundle传递对象详细介绍相关推荐

  1. android bundle 对象,Android Bundle传递对象

    首先Android的Bundle是可以传递对象的.我们可以用Bundle b = new Bundle():b.putSerializable("key", 对象引用); 但是这样 ...

  2. bundle传递对象与Serializable、Parcelable接口理解和思考

    bundle.putSerializable 或者 bundle.putParcelable 传进去的对象一定要implements Parcelable 或者 Serializable 这两个接口. ...

  3. java的annotation_Java Annotation认知(包括框架图、详细介绍、示例说明)

    摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...

  4. java.security Cipher 对象详细介绍

    cipher对象:此类为java.securtiy 为密码进行加密,解密的对象,根据java 1.6 doc javadoc 介绍: 此类为加密和解密提供密码功能.它构成了 Java Cryptogr ...

  5. java 信使服务_Messenger(信使(跨应用传递对象(数据)))的简单使用

    首先有2个应用1个服务端(接收数据)1个客户端(发送数据) 服务端步骤: 1.创建一个服务继承Service 代码 public class MyMessengerService extends Se ...

  6. 如何保证高可用?java删除文件夹下所有文件,技术详细介绍

    一.内存与线程 1.内存结构 内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平.JVM的内存结构规定Java程序 ...

  7. java compareto 中文_java中的compareto方法的详细介绍

    一.java中的compareto方法 1.返回参与比较的前后两个字符串的asc码的差值,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值 String a1 = "a" ...

  8. Java开发陪玩系统源码小程序app详细介绍

    Java开发的陪玩系统源码小程序app以下是它的功能介绍: 一.用户端: 1. 用户注册与登录:用户可以使用手机号或微信登录进行注册. 2. 服务列表:用户可以浏览选择陪玩师提供的服务类型和价格,包括 ...

  9. java scan map_键盘键位(Scancode Map)详细介绍

    键位的Scancode Map介绍(英文): http://download.microsoft.com/download/whistler/hwdev3/1.0/WXP/EN-US/scancode ...

最新文章

  1. SystemCenter2012SP1实践(15)共享库服务器和ISO
  2. 面试官:小伙汁,你画的SpringMVC请求处理过程是从网上抄的吧?
  3. 直白介绍卷积神经网络(CNN)
  4. [导入]从函数RND的使用想到的!
  5. linux改用户密码chpasswd,Linux chpasswd (批量或单一修改用户密码)和passwd(直接修改用户密码)...
  6. 转:程序员最值得关注的10个C开源项目
  7. 联合国devnet_联合国人权可能会适用于人工智能,如果是这样,考虑一下自动驾驶汽车的奇怪案例
  8. mysql流程控制ifnull,MySQL IFNULL()控制流函数的用途是什么?
  9. android怎样开启root权限管理,手机怎样开启root权限(最新安卓手机一键root教程)...
  10. 怎样让PHP提示错误信息
  11. 小米9网络位置服务器,如何查看小米9手机当前的IP地址
  12. 2021年小红书电商直播趋势报告-小红书数据分析报告
  13. 阿里云域名使用cloudflare的DNS解析隐藏真实IP
  14. QT信号和槽机制分析
  15. @赛迪顾问拍了拍我:数据标注基地全国多点开花
  16. Prometheus+Alertmanager详细配置邮箱告警
  17. ABAP EWM模拟 /SCWM/ADGI过账更改HU数量
  18. Jamie's Contact Groups ——(一对多)二分图多重最大匹配
  19. js 获取某一年第多少天是周几
  20. 【1093. 大样本统计】

热门文章

  1. HNSW算法原理(二)之删除结点
  2. C2371 “imaxdiv_t”: 重定义;“_abs64”: 重定义;不同的链接
  3. win10 安装cuda黑屏解决
  4. flutter 卡顿_Flutter WebView 卡顿问题
  5. android 反编译报错,android反编译
  6. add svn 多个文件_深圳信狮SVN技术文档
  7. 数组是逻辑结构还是存储结构_数据结构之存储方式
  8. Java 反射修改类的常量值、静态变量值、属性值
  9. 计算机显示桌面的按钮,显示桌面按钮不见了怎么办_显示桌面按钮不见了
  10. windows远程桌面管理工具下载_vnc viewer 64位下载,3步实现vnc viewer 64位下载