Android為intent提供了兩種傳遞對象參數類型的方法
分别需要使實體類實作Serializable接口、Parcelable接口
首先我們要知道,傳遞對象,需要先将對象序列化
一、那麼為什麼要對象序列化
1、永久性儲存對象,儲存對象的位元組序列到本地檔案中;
2、用過序列化對象在網絡中、程序間傳遞對象;
二、序列化對象什麼時候實作Serializable接口,什麼時候實作Parcelable接口接口
1、Parcelable不能使用将資料存儲在磁盤上,因為Parcelable在外界有變化的情況下不能很好的儲存資料的持續性。
是以在這種情況下,建議使用Serializable
2、在使用記憶體的時候,Parcelable比Serializable性能高,是以推薦使用Parcelable類。
并且Serializable在序列化的時候會産生大量的臨時變量,進而引起頻繁的GC。
----------------------------------------------------------------------------------------------------------
下面看下兩種傳遞對象方式的使用方法
一、實體類繼承Serializable接口的方式
1、第一步,将我們需要傳送的對象所屬的實體類實作Serializable接口
1 package com.xqx.IntentDemo;
2
3 import java.io.Serializable;
4
5 /**
6 * People實體類,含有 name,sex,age三個屬性 ,并實作類的封裝
7 */
8 public class People implements Serializable {
9 private String name;
10 private String sex;
11 private int age;
12
13 public String getName() {
14 return name;
15 }
16
17 public String getSex() {
18 return sex;
19 }
20
21 public int getAge() {
22 return age;
23 }
24
25 public void setName(String name) {
26 this.name = name;
27 }
28
29 public void setSex(String sex) {
30 this.sex = sex;
31 }
32
33 public void setAge(int age) {
34 this.age = age;
35 }
36 }
2、傳遞資料步驟
//建立Intent對象
Intent intent = new Intent();
intent.setClass(MainActivity.this, NewActivity.class);
//建立實體類
People people = new People();
people.setName("Mark");
people.setSex("boy");
people.setAge(20);
//添加傳送資料
intent.putExtra("people", people);
startActivity(intent);
3、接收資料
Intent intent = getIntent();
People people = (People) intent.getSerializableExtra("people");
Log.i("DATA_SHOW","name-->"+people.getName()+",sex-->"+people.getSex()+",age-->"+people.getAge());
4、Log列印
15794-15794/? I/DATA_SHOW﹕ name-->Mark,sex-->boy,age-->20
二、實體類繼承Parcelable接口的方式
1、實體類實作Parcelable接口
public class Student implements Parcelable {}
重寫接口的兩個方法
@Override
public int describeContents() {
return 0;
}
// 将對象的需要傳遞的屬性 以 Parcel parcel.writXxx的形式寫出,具體看屬性的類型
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name);
parcel.writeString(sex);
parcel.writeInt(age);
}
添加一個常量CREATOR(名字大小必須固定),該常量必須實作Parcelable的内部接口:Parcelable.Creator,并實作該接口中的兩個方法
public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() {
@Override
public Student createFromParcel(Parcel source) {
Student student = new Student();
student.name = source.readString();
student.sex = source.readString();
student.age = source.readInt();
return student;
}
@Override
public Student[] newArray(int size) {
return new Student[size];
}
};
2、傳遞資料
Intent intent = new Intent();
intent.setClass(MainActivity.this, NewActivity.class);
Student student = new Student();
student.setName("Alice");
student.setSex("girl");
student.setAge(19);
intent.putExtra("student",student);
startActivity(intent);
Intent intent = getIntent();
Student student = intent.getParcelableExtra("student");
Log.i("DATA_SHOW","name-->"+student.getName()+",sex-->"+student.getSex()+",age-->"+student.getAge());
4、Log日志
1280-1280/? I/DATA_SHOW﹕ name-->Alice,sex-->girl,age-->19