当前位置: 首页 > news >正文

湖南网站seo网站秒收录

湖南网站seo,网站秒收录,网站icp备案号查询,wordpress 地区插件【Android】使用 Intent 传递对象的两种序列化方式 Android 中我们经常使用 Intent 在不同的组件之间传递数据,比如从一个 Activity 跳转到另一个 Activity 时传递参数。对于简单的数据(如 int、String 等),使用 putExtra 非常方便…

【Android】使用 Intent 传递对象的两种序列化方式

Android 中我们经常使用 Intent 在不同的组件之间传递数据,比如从一个 Activity 跳转到另一个 Activity 时传递参数。对于简单的数据(如 intString 等),使用 putExtra 非常方便。但如果我们要传递 自定义对象,就需要使用更复杂的方式。

方式一:Serializable

1. 定义对象类

import java.io.Serializable;public class User implements Serializable {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}// Getter / Setter 省略
}

2. 发送方 Activity

Intent intent = new Intent(this, SecondActivity.class);
User user = new User("张三", 20);
intent.putExtra("user", user);
startActivity(intent);

3. 接收方 Activity

User user = (User) getIntent().getSerializableExtra("user");

这里调用了 getSerializableExtra() 方法来获取通过参数传递过来的序列化对象,接着再将它向下转型成 Person 对象,这样我们就成功实现了使用 Intent 来传递对象的功能了。

原理:通过 Java 的 ObjectOutputStream 将对象转为字节流,反序列化时用 ObjectInputStream 重建对象。

优点

  • 实现简单,只需实现 Serializable 接口。

缺点

  • 性能较差。
  • 不适合频繁传输或大对象。
  • 不能控制序列化过程,不安全。

方式二:Parcelable

Android 官方推荐使用 Parcelable,因为它序列化/反序列化速度更快,内存使用更高效。

1. 定义对象类

import android.os.Parcel;
import android.os.Parcelable;public class User implements Parcelable {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}protected User(Parcel in) {name = in.readString();age = in.readInt();}public static final Creator<User> CREATOR = new Creator<User>() {@Overridepublic User createFromParcel(Parcel in) {return new User(in);}@Overridepublic User[] newArray(int size) {return new User[size];}};@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(name);dest.writeInt(age);}@Overridepublic int describeContents() {return 0;}// Getter / Setter 可选
}

Parcelable 的实现方式要复杂一些,首先让 User 类实现了 Parcelable 接口,这样就必须重写 describeContents()writeToParcel() 这两个方法,其中 describeContents() 方法直接返回0就可以了,而 writeToParcel() 方法中我们需要调用 Parcel 的 writeXxx() 方法,将 Person 类中的字段一一写出。注意,字符串型数据就调用 writestring() 方法,整型数据就调用 writeInt() 方法,以此类推。

关键注意事项

  • createFromParcel() 方法中,字段读取顺序( readString()readInt() )必须严格匹配 writeToParcel() 方法中的字段写入顺序。

  • newArray() 方法只需简单创建对应大小的数组。

2. 发送方 Activity

Intent intent = new Intent(this, SecondActivity.class);
User user = new User("李四", 25);
intent.putExtra("user", user);
startActivity(intent);

3. 接收方 Activity

User user = getIntent().getParcelableExtra("user");

原理:通过 Parcel 内存容器直接操作二进制数据,避免反射开销。

优点

  • 性能优于 Serializable,可自定义序列化过程。

缺点

  • 编写代码繁琐,对于嵌套对象或集合,需要额外实现嵌套类的 Parcelable

两种方式对比

SerializableParcelable
实现复杂度简单(只需 implements)较高(手动写入字段)
序列化速度快(无反射)
GC/内存开销大(使用反射)小(结构紧凑)
是否可控不可控精确控制
嵌套支持自动递归序列化手动嵌套写入/读取
集合支持支持所有实现 Serializable 的集合需使用专门 API,如 writeTypedList

虽然 Serializable 使用简单,但在 Android 中,Parcelable 是更推荐的选择,尤其是在性能敏感或大对象频繁传输的场景。对于有嵌套对象或集合的类:

  • Serializable 可以省心地一键传输;
  • Parcelable 则更灵活、更高效,但需要写更多代码。
http://www.dtcms.com/a/587762.html

相关文章:

  • 农产品网站的品牌建设怎么在百度上做广告推广
  • 如何查询网站空间大小柬埔寨旅游网站建设
  • 外贸公司网站设计公司软件定制需要多少钱
  • 全国高校校园网站联盟建设上饶哪里做网站
  • 公司设计网站详情wordpress源码类主题
  • 建设淘宝网站的目的中国建设住建网站
  • 长沙专业网站制作h5网站开发费用
  • 郑州网站建设创新网络wordpress阿里云建站
  • 佛山营销网站建设服务公司网站宽度设置
  • 镇江网站优化电脑软件制作入门教程
  • 郑州建设银行网站房贷网点在哪里wordpress主题如何破解
  • 成都地铁建设分公司网站wordpress 禁用谷歌字体 地图
  • 宁波电信网站备案微信开发者平台api
  • 南昌网站seo济宁网站建设联系方式
  • 如何建设网站济南兴田德润团队怎么样摄影作品哪里看
  • 泊头市建设局网站青岛网站建设 上流
  • 首页八度空间济南网站搜索引擎优化
  • wordpress网站背景设置方法宁波seo培训
  • 网站建设的目的及意义厨之梦进口食品网站谁做的
  • 专业做食材网站wordpress调用树形目录
  • 网站建设兼职挣多少钱乐清新闻联播
  • 福州最好的网站设计服务公司辽宁食品 中企动力网站建设
  • 买卖域名的网站好怀安县建设局网站
  • 快速微信网站建设百度seo如何优化
  • 小企业公司网站建设承德市信息查询平台
  • 深圳建设信息网站官网邢台seo推广
  • wordpress 登录 显示不了seo推广专员工作内容
  • 网站突然打不开100件创意产品设计方案
  • 好看的网站首页欣赏潍坊网站制作熊掌号
  • 进修学校 网站建设目标福安 网站设计