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;
else
return 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有注解
@Parcelize
data class Item(
val title: String,
val price: Double,
val imageUrl: String,
val category: Category
) : Parcelable
@Parcelize
data 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();
}
@Override
public int describeContents() {
return 0;
}
@Override
public 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;
else
return new ArrayList<String>();
}
public static final Creator<ItemParcelable> CREATOR = new Creator<ItemParcelable>() {
@Override
public ItemParcelable[] newArray(int size) {
return new ItemParcelable[size];
}
@Override
public 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