2. IPC機制

IPC機制.png

腦圖鏈接:http://naotu.baidu.com/file/ac4586250dc8e89909b6021acbe81faf?token=547626ceb7336446

2.1 Android IPC簡介

線程與進程
線程是CPU調(diào)度的最小單元。
進程一般指一個執(zhí)行單元,在PC和移動設備上只一個程序或者一個應用。
一個進程可以包含多個線程。

2.2 Android中的多進程模式

2.2.1 開啟多進程模式

不考慮通過JNI在native層去fork新進程這種特殊方法的情況下撮执,
在Android中使用多進程只有一種方法,那就是給四大組件在Menifest中指定 android:process屬性舷丹。

2.2.2 多進程模式的運行機制

Android會為每個進程都分配一個獨立的虛擬機二打,不同的虛擬機在內(nèi)存分配上有不同的地址空間,這就導致在不同的虛擬機中訪問同一個類對象會產(chǎn)生多份副本掂榔。
所有運行在不同進程中的四大組件继效,只要他們之間需要通過內(nèi)存來共享數(shù)據(jù),都會共享失敗装获。
使用多進程會造成如下幾方面的問題:

  1. 靜態(tài)成員和單例模式完全失效瑞信。
  2. 線程同步機制完全失效。
  3. SharedPreferences的可靠性下降穴豫。
  4. Application會多次創(chuàng)建凡简。

跨進程通訊方式
Intent傳遞數(shù)據(jù)
共享文件
SharedPreferences
基于Binder的Messenger和AIDL
Socket

2.3 IPC基礎概念介紹

Serializable和Parcelable接口可以完成對象的序列化過程逼友。、

靜態(tài)成員變量屬于類不屬于對象秤涩,所以不參與序列化過程帜乞;
用transient關鍵字標記的成員變量不參與序列化過程;

2.3.1 Serializable接口

private static final long serialVersionUID = 1231231231231242L;
serialVersionUID如果不手動指定筐眷,系統(tǒng)會計算當前類的hash值復制給它黎烈,如果類發(fā)生變化,serialVersionUID就會改變匀谣,導致反序列化失敗照棋。
手動指定serialVersionUID可以很大程度的減少此種情況的發(fā)生。

2.3.2 Parcelable接口

public @ContentsFlags int describeContents();

/**
 * Flatten this object in to a Parcel.
 * 
 * @param dest The Parcel in which the object should be written.
 * @param flags Additional flags about how the object should be written.
 * May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}.
 */
public void writeToParcel(Parcel dest, @WriteFlags int flags);

/**
 * Interface that must be implemented and provided as a public CREATOR
 * field that generates instances of your Parcelable class from a Parcel.
 */
public interface Creator<T> {
    /**
     * Create a new instance of the Parcelable class, instantiating it
     * from the given Parcel whose data had previously been written by
     * {@link Parcelable#writeToParcel Parcelable.writeToParcel()}.
     * 
     * @param source The Parcel to read the object's data from.
     * @return Returns a new instance of the Parcelable class.
     */
    public T createFromParcel(Parcel source);
    
    /**
     * Create a new array of the Parcelable class.
     * 
     * @param size Size of the array.
     * @return Returns an array of the Parcelable class, with every entry
     * initialized to null.
     */
    public T[] newArray(int size);
}

Serilizable Parcelable對比
Serilizable是java的序列化接口武翎,使用簡單烈炭,開銷大。
Parcelable是Android序列化接口宝恶,使用復雜(IDE自動生成就問題不大了)符隙,開銷小,推薦使用垫毙。
Parcelable主要用在內(nèi)存序列化上膏执,本地存儲、網(wǎng)絡傳輸稍顯復雜露久,建議使用Serializable。

2.3.3 Binder

Binder是Android中的一個類欺栗,實現(xiàn)了IBinder接口毫痕。
從IPC角度來說,Binder是Android中的一種跨進程通信方式迟几,Binder還可以理解為一種虛擬的物理設備消请,他的設備驅(qū)動是/dev/binder,該通信方式在Linux中沒有类腮;
從Android Framwork角度來說臊泰,Binder是ServiceManager連接各種Manager(ActivityManager、WindowManager蚜枢,等等)和響應ManagerService的橋梁缸逃;
從Android應用層來說,Binder是客戶端和服務端進行通信的媒介厂抽,當bindService的時候需频,服務端會返回一個包含了服務端業(yè)務調(diào)用的Binder對象,通過這個Binder對象筷凤,客戶端就可以獲取五福短提供的服務或者數(shù)據(jù)昭殉,這里的服務包括普通服務和基于AIDL的服務苞七。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挪丢,隨后出現(xiàn)的幾起案子蹂风,更是在濱河造成了極大的恐慌,老刑警劉巖乾蓬,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惠啄,死亡現(xiàn)場離奇詭異,居然都是意外死亡巢块,警方通過查閱死者的電腦和手機礁阁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來族奢,“玉大人姥闭,你說我怎么就攤上這事≡阶撸” “怎么了棚品?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長廊敌。 經(jīng)常有香客問我铜跑,道長,這世上最難降的妖魔是什么骡澈? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任锅纺,我火速辦了婚禮,結果婚禮上肋殴,老公的妹妹穿的比我還像新娘囤锉。我一直安慰自己,他們只是感情好护锤,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布官地。 她就那樣靜靜地躺著,像睡著了一般烙懦。 火紅的嫁衣襯著肌膚如雪驱入。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天氯析,我揣著相機與錄音亏较,去河邊找鬼。 笑死掩缓,一個胖子當著我的面吹牛宴杀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拾因,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼旺罢,長吁一口氣:“原來是場噩夢啊……” “哼旷余!你這毒婦竟也來了?” 一聲冷哼從身側響起扁达,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤正卧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后跪解,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炉旷,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年叉讥,在試婚紗的時候發(fā)現(xiàn)自己被綠了窘行。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡图仓,死狀恐怖罐盔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情救崔,我是刑警寧澤惶看,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站六孵,受9級特大地震影響纬黎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劫窒,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一本今、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧主巍,春花似錦冠息、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岖赋。三九已至檬果,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唐断,已是汗流浹背选脊。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脸甘,地道東北人恳啥。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像丹诀,于是被迫代替她去往敵國和親钝的。 傳聞我的和親對象是個殘疾皇子翁垂,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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