Android——Serializable和Parcelable
在Android中传递对象的方式
在 Android 开发中,Parcelable 和 Serializable 是两种用于对象序列化的接口
public class Student implements Serializable {public int id;public String name;public int age;public Student(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}
}
Activity1.java 发送数据
public void startAction(View view) {Intent intent = new Intent(this, ParcelableActivity.class);Student student = new Student(1, "zs", 12);intent.putExtra("student", student);startActivity(intent);}
Activity2.java 接收数据
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_parcelable);tv_name = findViewById(R.id.name);Intent intent = getIntent();Student student = (Student) intent.getSerializableExtra("student");if (student != null) {tv_name.setText(student.name);}}
public class StudentParcelable implements Parcelable {public String name;public int age;public StudentParcelable(){}protected StudentParcelable(Parcel in) {name = in.readString();age = in.readInt();}@Overridepublic int describeContents() {return 0;}// 把对象写入到 Parcel对象里面去@Overridepublic void writeToParcel(@NonNull Parcel dest, int flags) {dest.writeString(name);dest.writeInt(age);}public static final Creator<StudentParcelable> CREATOR = new Creator<StudentParcelable>() {// 创建StudentParcelable对象 并且Parcel构建好,传递给我们的StudentParcelable(成员数据就可以从Parcel对象获取了)@Overridepublic StudentParcelable createFromParcel(Parcel source) {return new StudentParcelable(source);}@Overridepublic StudentParcelable[] newArray(int size) {return new StudentParcelable[size];}};
}
Activity1.java 发送数据
public void startAction(View view) {Intent intent = new Intent(this, SerializableActivity.class);StudentParcelable stu = new StudentParcelable();stu.name = "zssss";stu.age = 12;intent.putExtra("student", stu);startActivity(intent);}
Activity2.java 接收数据
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_serializable);TextView tv = findViewById(R.id.tv);Intent intent = getIntent();StudentParcelable stu = intent.getParcelableExtra("student");if (stu.name != null) {tv.setText(stu.name);}}
选择 Parcelable:
高频数据传输:如 Activity 之间传递复杂对象。
性能敏感场景:避免因序列化导致界面卡顿(如大量数据传递)。
Android 组件通信:Intent 中传递自定义对象。
选择 Serializable:
数据持久化:将对象保存到文件或数据库中。
网络传输:通过 HTTP 或 Socket 发送对象。
简单场景:快速实现序列化,无需处理复杂逻辑。