編輯:關於android開發
2月下旬辭職了,去海南度假到現在,領略了一把三亞風情也算任性和
然而這樣任性帶來的後果就是。。不行了我必須吐槽一句。。
不知道其他沒有畢業的童鞋是不是也是這種遭遇呢,難道真的是寒冬。。 其實還是自己能力不夠。。不過別灰心,只要自己足夠努力,遲早會有工作的(標標居然建議我先去端盤子????媽蛋)。
牢騷完畢,為了更好地提升自己,趕緊翻開了主席的《開發藝術探索》,開始學習今天的內容。在說Messanger之前呢,先有必要說說Android中的序列化。
在Android中有兩種序列化方式,Serializable(原諒我到現在都不會拼寫。。)和Parcelable。其中Serializable是java提供的,而Parcelable是Android獨有的。
兩種序列化的不同:
Parcelable的效率高,但是使用麻煩,主要用於內存序列化。
Serializable使用簡單,但是需要做大量的I/O操作,開銷很大,適用於儲存設備,或者網絡傳輸。
Serializable的使用及其簡單,只要實現Serializable接口即可。
在用ObjectOutputStream和ObjectInputStream即可進行序列化操作,舉個栗子:
public class Goods implements Serializable{
private int mId;
public Goods(int id){
mId = id;
}
public int getmId() {
return mId;
}
}
Goods goods = new Goods(3);
//序列化
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/sdcard/test.txt"));
oos.writeObject(goods);
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
//反序列化
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("/sdcard/test.txt"));
Goods goodsIn = (Goods)ois.readObject();
ois.close();
Log.e("wing",goodsIn.getmId()+"");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
這時,可以看到控制台輸出了id 為3。
需要指出的一點是,為了保證序列化的正確性,應該給Goods類添加一個序列化UID。即serialVersionUID。這裡用戶可以自定義,主要是類的版本檢驗,在反序列化過程中,如果這個id值不一致,則反序列化失敗。
private static final long serialVersionUID = 615555755L
parcelable的使用稍微復雜。但是有強大的as其實也很簡單。再以Goods為例,多增加一個name屬性。
先實現Parcelable接口,按照提示生成如下代碼:
public class Goods implements Parcelable{
private int mId;
private String mName;
public Goods(int id,String name){
mId = id;
mName = name;
}
protected Goods(Parcel in) {
mId = in.readInt();
mName = in.readString();
}
//自動生成的代碼
public static final Creator CREATOR = new Creator() {
@Override
public Goods createFromParcel(Parcel in) {
return new Goods(in);
}
@Override
public Goods[] newArray(int size) {
return new Goods[size];
}
};
public int getmId() {
return mId;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mId);
dest.writeString(mName);
}
}
這樣便實現了一個Parcel的序列化。當然這都是AS給你生成好的,我們來分析下裡面的方法。
看多增加的一個構造器,參數為parcel,他給屬性是通過Parcel.read()進行的,比如你的id為int類型,那麼就為id = in.readInt(); 這部分應該很好理解。
再來看與之對應的wirteToParcel接口,就是把這些屬性write出去。
在用intent傳遞數據的時候,可以傳遞實現序列化的類,當然list和map也可以,要求內部元素也是可序列化的。值得注意的是intent傳遞有個致命的缺陷,就是大小限制。
自定義輪播圖片框架的使用,自定義播圖片框架我是一個比較懶惰的人。。 不想說太多高深的東西,,只會淺淺的表達。。。。因為妹子做了程序員 是很悲慘的故事。。哈哈 現在 就來說
深入理解Android異步消息處理機制,一。概述 Android 中的異步消息處理主要分為四個部分組成,Message、Hndler、MessageQu
【原創】StickHeaderListView的簡單實現,解決footerView問題,stickheaderlistview1、前言: 前幾天用了GitH
【Android】由淺到深理解AIDL 一、 Binder概述 1.1 為什麼要用binder 出於安全性、穩定性和內存管理的考慮,Android的應用和系統服務運行在分