編輯:關於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系統的江湖中有四大組件:活動(Activity), 服務(Service), 廣播接收器(Broadcast Reciver)和內容提供者(Content
UI效果圖:最終的效果是可以滑動刻度來選取金額,並且滑動停止後必須定位到某個金額上,不能停留在中間。分析:決定用listview來實現上述效果分析UI圖,發現有三種類型的
先看效果圖主要處理的地方:1、RecyclerView中Adapter的item個人可以無限輪詢.2、RecyclerView自動滑動3、手指按下時滑動停止,手指抬起後繼
百度專車是百度地圖最新推出的一項提供高品質用車的服務。百度憑借百度地圖龐大的用戶群體,開展這項專車服務,提供從經濟型到奢華型共5大類20余種車型供用戶選擇,