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
public class ItemSerializable implements Serializable {private String name;private int age;public ArrayList<String> address;public ItemSerializable(String name, int age, ArrayList<String> address) {super();this.name = name;this.age = age;this.address = address;}public ArrayList<String> getAddress() {if (!(address == null))return address;elsereturn new ArrayList<String>();}public String getName() {return name;}public int getAge() {return age;}}
Parcelable
cons
- takes more time to implement
pros
- faster
- array can be passed via Intent in android
- no reflection, 选择字段读写
- kotlin有注解
@Parcelizedata class Item(val title: String,val price: Double,val imageUrl: String,val category: Category) : Parcelable@Parcelizedata class Category(val tag: String) : Parcelable
- java编写稍微复杂
public class ItemParcelable implements Parcelable {private int age;private String name;private ArrayList<String> address;public ItemParcelable(String name, int age, ArrayList<String> address) {this.name = name;this.age = age;this.address = address;}public ItemParcelable(Parcel source) {age = source.readInt();name = source.readString();address = source.createStringArrayList();}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(age);dest.writeString(name);dest.writeStringList(address);}public int getAge() {return age;}public String getName() {return name;}public ArrayList<String> getAddress() {if (!(address == null))return address;elsereturn new ArrayList<String>();}public static final Creator<ItemParcelable> CREATOR = new Creator<ItemParcelable>() {@Overridepublic ItemParcelable[] newArray(int size) {return new ItemParcelable[size];}@Overridepublic ItemParcelable createFromParcel(Parcel source) {return new ItemParcelable(source);}};}
construct
Class clazz = Class.forName(activity);Intent intent = new Intent(MainActivity.this.getApplicationContext(), clazz);Item item = new Item("hello", 888, "testing", new Category("tag"));intent.putExtra("primitive Int", 888);intent.putExtra("item",item);ArrayList<String> arrayList = new ArrayList<>();arrayList.add("dddddddd");ItemParcelable mObjects = new ItemParcelable("name", 99, arrayList);intent.putExtra("itemParcelable",mObjects);ItemSerializable itemSerializable = new ItemSerializable("name", 99, arrayList);intent.putExtra("itemSerializable", itemSerializable);startActivity(intent);
getdata
val item = intent.getParcelableExtra<Item>("item")val java = intent.getParcelableExtra<ItemParcelable>("itemParcelable")val itemSerializable = intent.getSerializableExtra("itemSerializable") as ItemSerializable
