Android跨進程通信

Android跨進程通信:通過Intent來傳遞數(shù)據(jù),共享文件和SharedPreference跌前,基于Binder的Messenger和AIDL以及Socket棕兼。
IPC基礎(chǔ)概念介紹:
1、Serializable接口:Serializable是java提供的一個序列化接口抵乓,它是一個空接口伴挚,為對象提供標(biāo)準(zhǔn)的序列化和反序列化操作。
User類:

public class User {    
    private static final long serialVersionUID = 519067123721295773L;    
    public int userId;    
    public String userName;    
    public boolean isMale;    
    public User(int userId, String userName, boolean isMale) {        
        this.userId = userId;        
        this.userName = userName;        
        this.isMale = isMale;    
        }
}

序列化過程:

User user = new User(0, "jake", true);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("cache.txt"));
out.writeObject(user);
out.close();

反列化過程:

ObjectInputStream in = new ObjectInputStream(new FileInputStream("cache.txt"));
User newUser = (User)in.readObject();
in.close();

只要把實現(xiàn)了Serializable接口的User對象寫到文件中就可以快速恢復(fù)了灾炭,恢復(fù)后的對象newUser和user內(nèi)容完全一樣茎芋,但是兩者并不是一個對象。如果之前沒有指定serializableUID也是可以實現(xiàn)序列化蜈出,但是不能保證類的內(nèi)容败徊、成員變量是否一樣。所以最好需要指定一個掏缎,可以手動指定皱蹦。也可以重寫系統(tǒng)默認(rèn)的序列化過程。
2眷蜈、Parcelable接口:Android提供的序列化接口沪哺。

public class UserProcelable implements Parcelable {    
    public int userId;    
    public String userName;    
    public boolean isMale;    
    public Book book;    
    public UserProcelable(int userId, String userName, boolean isMale) {        
        this.userId = userId;        
        this.userName = userName;        
        this.isMale = isMale;    
    }    
    public int describeContents() {        
        return 0;    
    }    
    public void writeToParcel(Parcel out, int flags) {        
        out.writeInt(userId);        
        out.writeSerializable(userName);        
        out.writeInt(isMale ? 1 : 0);        
        out.writeParcelable(book, 0);    
    }    
    public static final Parcelable.Creator<UserProcelable> CREATOR = new       Parcelable.Creator<UserProcelable>() {        
        public UserProcelable createFromParcel(Parcel in) {            
        return new UserProcelable(in);        
    }        
    public UserProcelable[] newArray(int size) {            
        return new UserProcelable[size];        
    }    
  };    
    private UserProcelable(Parcel in) {        
        userId = in.readInt();        
        userName = in.readString();        
        isMale = in.readInt() == 1;        
        book = in.readParcelable(Thread.currentThread().getContextClassLoader());    
    }
}

在上面代碼中,Parcel內(nèi)部包裝了可序列化的數(shù)據(jù)酌儒,可以在Binder中自由傳輸辜妓。
在序列化過程也能夠中需要實現(xiàn)的功能有序列化、反序列化和內(nèi)容描述忌怎。
序列化由writeToParcel方法完成籍滴,最終通過Parcel中的方法完成。
反序列化由CREATOR來完成榴啸,其內(nèi)部標(biāo)明了如何創(chuàng)建序列化對象和數(shù)組孽惰,也是通過Parcel中的方法完成反序列化。
內(nèi)容描述由describeContents方法完成鸥印,基本上都返回0勋功。
其中Book是另外一個可序列化對象坦报。

上述兩種方法的區(qū)別:
Serializable是java中的接口,需要大量的IO操作狂鞋,實現(xiàn)簡單片择。
Paracel是Android中的接口,實現(xiàn)麻煩骚揍,但是效率高字管。
如果要涉及到將信息序列化后存儲到硬盤或者通過網(wǎng)絡(luò)傳輸,還是推薦使用Serializable信不,否則一般情況下推薦使用Paracel

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘲叔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浑塞,更是在濱河造成了極大的恐慌,老刑警劉巖政己,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酌壕,死亡現(xiàn)場離奇詭異,居然都是意外死亡歇由,警方通過查閱死者的電腦和手機卵牍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沦泌,“玉大人糊昙,你說我怎么就攤上這事⌒磺” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長葡兑。 經(jīng)常有香客問我缨历,道長,這世上最難降的妖魔是什么千劈? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任祭刚,我火速辦了婚禮,結(jié)果婚禮上墙牌,老公的妹妹穿的比我還像新娘涡驮。我一直安慰自己,他們只是感情好喜滨,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布捉捅。 她就那樣靜靜地躺著,像睡著了一般虽风。 火紅的嫁衣襯著肌膚如雪锯梁。 梳的紋絲不亂的頭發(fā)上即碗,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音陌凳,去河邊找鬼剥懒。 笑死,一個胖子當(dāng)著我的面吹牛合敦,可吹牛的內(nèi)容都是我干的初橘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼充岛,長吁一口氣:“原來是場噩夢啊……” “哼保檐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起崔梗,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤夜只,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蒜魄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扔亥,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年谈为,在試婚紗的時候發(fā)現(xiàn)自己被綠了旅挤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡伞鲫,死狀恐怖粘茄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秕脓,我是刑警寧澤柒瓣,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站吠架,受9級特大地震影響嘹朗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诵肛,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一屹培、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怔檩,春花似錦褪秀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乙埃,卻和暖如春闸英,著一層夾襖步出監(jiān)牢的瞬間锯岖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工甫何, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留出吹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓辙喂,卻偏偏與公主長得像捶牢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子巍耗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容