Android Intent对象传递方案
Intent 的对象传递,算是 Android 里绕不开的老问题了。像String
、int
这种基础类型,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
要实现所有字段的读写,否则可别怪你反序列化失败哦~
评论区