Android Serializable和Parcelable的区别和用法
来源:互联网 发布:stc52单片机和stc51 编辑:程序博客网 时间:2024/05/04 06:55
有时我们在两个Activity之间传递数据时,传递的数据过多时,这时我门会考虑到传递一个对象过去,来解决这个问题,有两个接口Serializable和Parcelable可以实现对象的传递;既然有两个,那肯定是有区别的?
Serializable接口:Serializable 接口是一种标识接口(marker interface),这意味着无需实现方法,Java便会对这个对象进行高效的序列化操作,但是在内存中开销方面会比较大,效率会过慢。
Parcelable接口:Android的Parcelable的设计初衷是因为Serializable效率过慢,在内存开销方面较小,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。
为了提高程序的性能和效率,google官方推荐大家使用Parcelable接口;接下来看看怎么使用它们吧?
Serializable接口:类只需要实现Serializable接口
import java.io.Serializable;public class Teacher implements Serializable { 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; } @Override public String toString() { return "Teacher{" + "name='" + name + '\'' + ", age='" + age + '\'' + '}'; }}
启动Activity时,使用 intent.putExtra()方法将对象传递过去。
Teacher teacher=new Teacher(); Intent intent=new Intent(MainActivity.this,Main2Activity.class); teacher.setName("张丹"); teacher.setAge(32); intent.putExtra("teacher",teacher); startActivity(intent);
Main2Activity:
Intent intent = getIntent(); Teacher teacher = (Teacher) intent.getSerializableExtra("teacher"); Toast.makeText(this, teacher.toString(), Toast.LENGTH_SHORT).show();
Parcelable接口:parcelable需要实现writeToParcel、describeContents函数以及静态的CREATOR变量,实际上就是将如何打包和解包的工作自己来定义,而序列化的这些操作完全由底层实现。
import android.os.Parcel;import android.os.Parcelable;public class Student implements Parcelable { private String name; private int age; public Student() { } //解包,读取数据 protected Student(Parcel in) { name = in.readString(); age = in.readInt(); } 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; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int describeContents() { return 0; } //将数据打包 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(age); } //对象的创建器,将数据解包 public static final Creator<Student> CREATOR = new Creator<Student>() { @Override public Student createFromParcel(Parcel in) { return new Student(in); } @Override public Student[] newArray(int size) { return new Student[size]; } };}
启动Activity时,使用 intent.putExtra()方法将对象传递过去
Student student=new Student(); Intent intent=new Intent(MainActivity.this,Main3Activity.class); student.setName("李思思"); student.setAge(18); intent.putExtra("student",student); startActivity(intent);
Main3Activity
Intent intent = getIntent();Student student = intent.getParcelableExtra("student");Toast.makeText(this, student.toString(), Toast.LENGTH_SHORT).show();
以上是Serializable和Parcelable的区别和用法,小编的水平有限,如果大家有什么疑问,大家一起讨论,可以加我的qq 1059408192;
转载请注明出处;
- Android Serializable和Parcelable的区别和用法
- Android中Serializable和Parcelable的用法及区别
- Android - Parcelable接口用法 和 与 Serializable 的区别
- android Parcelable和Serializable的不同用法
- 【转】Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android:Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android中Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- Android Parcelable和Serializable的区别
- C语言-LINUX文件
- Running Track
- ReportNg测试报告的定制修改(二)
- 常用的软件
- 在Android中来实现视频的播放
- Android Serializable和Parcelable的区别和用法
- C语言-LINUX线程
- 1833: [ZJOI2010]count 数字计数
- ASP.NET Web API:安全验证之使用摘要认证(digest authentication)
- Kaggle Titanic Competition-第四部分
- C语言-mysql
- Eclipse MAT 检测内存泄露
- 树、森林与二叉树的转换总结
- ios开发之 APP上架要填写什么?有什么要注意?