为什么Android提供了2个用于序列化对象的接口?Serializable对象是否与Android Binder和AIDL文件进行交互?
我已经阅读了很多关于序列化的文章以及它如何如此美妙和精彩,但没有一个论点足够令人信服.我想知道是否有人能真正告诉我通过序列化一个类我们能真正实现的目标是什么?
据我所知,Bundle并且Parcelable属于Android执行序列化的方式.例如,它用于在活动之间传递数据.但我想知道,如果在将Parcelable业务对象的状态保存到内部存储器的情况下使用而不是经典序列化有什么好处吗?它会比传统方式更简单或更快吗?我应该在哪里使用经典序列化以及哪里更好地使用捆绑包?
所以我知道建议在Android中使用Parcelable而不是Serializable,因为它更快.
我的问题是:使用Serializable是不可避免的吗?
如果我有一个我想要序列化的自定义对象,那么假设我有以下类定义
public class Person {
String name;
int Age;
...
....
}
Run Code Online (Sandbox Code Playgroud)
使这个parcelable很容易,因为Person类包含parcel.write*()支持的类型,即parcel.writeString和parcel.writeInt
现在,如果Person类如下:
public class PersonTwo {
MyCustomObj customObj;
String name;
int Age;
...
....
}
Run Code Online (Sandbox Code Playgroud)
我怎么想包裹MyCustomObj对象?看来我需要再次使用serializable吗?但同样,我认为使用serializable是慢的,似乎我们别无选择,只能在这种情况下使用它.
我不明白
谁能告诉我在这种情况下我会如何包裹PersonTwo?
我想在Android中的两个活动之间传递对象,这引导我进入parcelable类.我不是要尝试转换我当前的类但不了解Parcelable.Creator方法.
这就是我到目前为止所拥有的
public class Account implements Parcelable{
/**
* Declare private variables
*/
private String fName;
private String lName;
private String screenName;
private String email;
private String level;
private int userId;
//private Context myContext;
/**
* Account constructor
*/
public Account(String fName, String lName, String sName, String email, String level, String x) throws Exception{
/**Parse userId into int */
this.userId = Integer.parseInt(x);
/**Select from DB user details */
/**Initialize variables with results */
this.setfName(fName);
this.setlName(lName);
this.setScreenName(sName);
this.setEmail(email);
this.setLevel(level);
}
@Override …Run Code Online (Sandbox Code Playgroud) android ×4
parcelable ×3
bundle ×1
java ×1
object ×1
oop ×1
parcel ×1
serializable ×1
stream ×1