在Android中經過Intent使用Bundle傳遞對象


被傳遞的對象須要先實現序列化,而序列化對象有兩種方式:java.io.Serializableandroid.os.Parcelable

Java
中使用的是Serializable,而谷歌在Android使用了自定義的Parcelable
兩種序列化方式的區別:
1.
在使用內存的時候,ParcelableSerializable性能高,推薦使用Parcelable類;
2.Serializable
在序列化的時候會產生大量的臨時變量,從而引發頻繁的GC
3.Parcelable
不能使用在要將數據存儲在磁盤上的狀況,由於Parcelable不能很好的保證數據的持續性在外界有變化的狀況下,這種狀況建議使用Serializable

第一步:定義序列化實體類;

java

Serializable方式:android

[java] view plaincopy數組

1.  /** app

2.   * PersonSer ide

3.   *  性能

4.   * @author http://blog.csdn.net/zuolongsnail this

5.   */  spa

6.  public class PersonSer implements Serializable {  .net

7.    orm

8.      /** 

9.       * serialVersionUID的做用是在修改實體類後,能夠正常的序列化和反序列化,在此很少說,你們能夠谷歌百度下。 

10.      */  

11.     private static final long serialVersionUID = -7620435178023928252L;  

12.   

13.     private String name;  

14.   

15.     private int age;  

16.   

17.     public String getName() {  

18.         return name;  

19.     }  

20.   

21.     public void setName(String name) {  

22.         this.name = name;  

23.     }  

24.   

25.     public int getAge() {  

26.         return age;  

27.     }  

28.   

29.     public void setAge(int age) {  

30.         this.age = age;  

31.     }  

32.   

33. }  

Parcelable方式:

[java] view plaincopy

1.  /** 

2.   * PersonPar 

3.   *  

4.   * @author http://blog.csdn.net/zuolongsnail 

5.   */  

6.  public class PersonPar implements Parcelable {  

7.    

8.      private String name;  

9.    

10.     private int age;  

11.   

12.     public String getName() {  

13.         return name;  

14.     }  

15.   

16.     public void setName(String name) {  

17.         this.name = name;  

18.     }  

19.   

20.     public int getAge() {  

21.         return age;  

22.     }  

23.   

24.     public void setAge(int age) {  

25.         this.age = age;  

26.     }  

27.   

28.     /** 

29.      * 序列化實體類 

30.      */  

31.     public static final Parcelable.Creator<PersonPar> CREATOR = new Creator<PersonPar>() {  

32.         public PersonPar createFromParcel(Parcel source) {  

33.             PersonPar personPar = new PersonPar();  

34.             personPar.name = source.readString();  

35.             personPar.age = source.readInt();  

36.             return personPar;  

37.         }  

38.   

39.         public PersonPar[] newArray(int size) {  

40.             return new PersonPar[size];  

41.         }  

42.     };  

43.   

44.     @Override  

45.     public int describeContents() {  

46.         return 0;  

47.     }  

48.   

49.     /** 

50.      * 將實體類數據寫入Parcel 

51.      */  

52.     @Override  

53.     public void writeToParcel(Parcel parcel, int flags) {  

54.         parcel.writeString(name);  

55.         parcel.writeInt(age);  

56.     }  

57.   

58. }  

第二步:傳遞序列化對象;

[java] view plaincopy

1.  Intent intent = new Intent(MainActivity.this, DestActivity.class);  

2.  Bundle bundle = new Bundle();  

3.  switch (v.getId()) {  

4.  case R.id.serializable_btn:  

5.      // Serializable傳遞對象  

6.      PersonSer personSer = new PersonSer();  

7.      personSer.setName("zuolong");  

8.      personSer.setAge(26);  

9.      bundle.putSerializable(SER_KEY, personSer);  

10.     intent.putExtra("type", SER_TYPE);  

11.     intent.putExtras(bundle);  

12.     startActivity(intent);  

13.     break;  

14. case R.id.parcelable_btn:  

15.     // Parcelable傳遞對象  

16.     PersonPar personPar = new PersonPar();  

17.     personPar.setName("snail");  

18.     personPar.setAge(27);  

19.     // BundleputParcelableArrayputParcelableArrayList方法,也就能夠傳遞數組和列表  

20.     bundle.putParcelable(PAR_KEY, personPar);  

21.     intent.putExtra("type", PAR_TYPE);  

22.     // Intent也有putParcelableArrayListExtra方法,能夠傳遞實現Parcelable接口的對象列表  

23.     intent.putExtras(bundle);  

24.     startActivity(intent);  

25.     break;  

26. }  

第三步:獲取對象;

[java] view plaincopy

1.  StringBuffer sb = new StringBuffer();  

2.  String type = getIntent().getStringExtra("type");  

3.  // 根據type判斷是哪一種類型  

4.  if (type.equals(MainActivity.SER_TYPE)) {  

5.      // 獲取Serializable對象  

6.      PersonSer personSer = (PersonSer) getIntent().getSerializableExtra(  

7.              MainActivity.SER_KEY);  

8.      sb.append("----From Serializable----").append("\n");  

9.      sb.append("Name:").append(personSer.getName()).append("\n");  

10.     sb.append("Age:").append(personSer.getAge()).append("\n");  

11. else if (type.equals(MainActivity.PAR_TYPE)) {  

12.     // 獲取Parcelable對象  

13.     PersonPar personPar = (PersonPar) getIntent().getParcelableExtra(  

14.             MainActivity.PAR_KEY);  

15.     sb.append("----From Parcelable----").append("\n");  

16.     sb.append("Name:").append(personPar.getName()).append("\n");  

17.     sb.append("Age:").append(personPar.getAge()).append("\n");  

18. }  

相關文章
相關標籤/搜索