Android Intent对象传递方案

Intent 的对象传递,算是 Android 里绕不开的老问题了。像Stringint这种基础类型,putExtra()就能轻松搞定。但自定义对象就没那么简单了——你得靠Serializable或者Parcelable来出马,各有千秋。

Serializable的实现方式挺,你只要让对象实现Serializable接口就行,传值的时候用putExtra()扔进去,接收方再用getSerializableExtra()拿出来。代码也好写:

Intent intent = new Intent(context, TargetActivity.class);
intent.putExtra("myObject", myObject);
startActivity(intent);

MyObject received = (MyObject) getIntent().getSerializableExtra("myObject");

不过嘛,它就是图省事,性能上没啥优势。适合开发初期图快或者偶尔传点小对象。

Parcelable就不一样了,Android 系统专门优化过,序列化效率高,响应也快。你得手动写writeToParcel()CREATOR这些方法,但换来的是更顺畅的体验。

public class MyObject implements Parcelable {
  // 成员变量...

@Override public void writeToParcel(Parcel dest, int flags) { // 写成员变量 }

public static final Creator CREATOR = new Creator() { @Override public MyObject createFromParcel(Parcel in) { return new MyObject(in); }

@Override public MyObject[] newArray(int size) { return new MyObject[size]; } }; }

拿来传 Intent 也没问题:

intent.putExtra("myObject", myObject);
MyObject received = getIntent().getParcelableExtra("myObject");

如果你经常在组件之间传复杂对象,比如列表数据、用户信息啥的,还是推荐你用Parcelable。不想手写?用工具库,比如Parceler或者AutoValue,省事多了。

提醒一句:别忘了给类加上public,而且Parcelable要实现所有字段的读写,否则可别怪你反序列化失败哦~

zip 文件大小:1.2MB