Serializable-Java

cons

  • reflection - slow
  • standard Java interface
  • creates a lot of temporary objects and causes quite a bit of garbage collection

    pros

  • easier to implement

  1. public class ItemSerializable implements Serializable {
  2. private String name;
  3. private int age;
  4. public ArrayList<String> address;
  5. public ItemSerializable(String name, int age, ArrayList<String> address) {
  6. super();
  7. this.name = name;
  8. this.age = age;
  9. this.address = address;
  10. }
  11. public ArrayList<String> getAddress() {
  12. if (!(address == null))
  13. return address;
  14. else
  15. return new ArrayList<String>();
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public int getAge() {
  21. return age;
  22. }
  23. }

Parcelable

cons

  • takes more time to implement

pros

  • faster
  • array can be passed via Intent in android
  • no reflection, 选择字段读写
  • kotlin有注解
  1. @Parcelize
  2. data class Item(
  3. val title: String,
  4. val price: Double,
  5. val imageUrl: String,
  6. val category: Category
  7. ) : Parcelable
  8. @Parcelize
  9. data class Category(
  10. val tag: String
  11. ) : Parcelable
  • java编写稍微复杂
  1. public class ItemParcelable implements Parcelable {
  2. private int age;
  3. private String name;
  4. private ArrayList<String> address;
  5. public ItemParcelable(String name, int age, ArrayList<String> address) {
  6. this.name = name;
  7. this.age = age;
  8. this.address = address;
  9. }
  10. public ItemParcelable(Parcel source) {
  11. age = source.readInt();
  12. name = source.readString();
  13. address = source.createStringArrayList();
  14. }
  15. @Override
  16. public int describeContents() {
  17. return 0;
  18. }
  19. @Override
  20. public void writeToParcel(Parcel dest, int flags) {
  21. dest.writeInt(age);
  22. dest.writeString(name);
  23. dest.writeStringList(address);
  24. }
  25. public int getAge() {
  26. return age;
  27. }
  28. public String getName() {
  29. return name;
  30. }
  31. public ArrayList<String> getAddress() {
  32. if (!(address == null))
  33. return address;
  34. else
  35. return new ArrayList<String>();
  36. }
  37. public static final Creator<ItemParcelable> CREATOR = new Creator<ItemParcelable>() {
  38. @Override
  39. public ItemParcelable[] newArray(int size) {
  40. return new ItemParcelable[size];
  41. }
  42. @Override
  43. public ItemParcelable createFromParcel(Parcel source) {
  44. return new ItemParcelable(source);
  45. }
  46. };
  47. }

construct

  1. Class clazz = Class.forName(activity);
  2. Intent intent = new Intent(MainActivity.this.getApplicationContext(), clazz);
  3. Item item = new Item("hello", 888, "testing", new Category("tag"));
  4. intent.putExtra("primitive Int", 888);
  5. intent.putExtra("item",item);
  6. ArrayList<String> arrayList = new ArrayList<>();
  7. arrayList.add("dddddddd");
  8. ItemParcelable mObjects = new ItemParcelable("name", 99, arrayList);
  9. intent.putExtra("itemParcelable",mObjects);
  10. ItemSerializable itemSerializable = new ItemSerializable("name", 99, arrayList);
  11. intent.putExtra("itemSerializable", itemSerializable);
  12. startActivity(intent);

getdata

  1. val item = intent.getParcelableExtra<Item>("item")
  2. val java = intent.getParcelableExtra<ItemParcelable>("itemParcelable")
  3. val itemSerializable = intent.getSerializableExtra("itemSerializable") as ItemSerializable