国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

IPC機制

2019-11-09 18:01:32
字體:
供稿:網(wǎng)友

一、概念 1. ipc (Inter-PRocess Communication,進程間通信); 2. 線程 CPU調(diào)度的最小單元,線程是一種有限的系統(tǒng)資源; 3. 進程 一個執(zhí)行單元 ,一個進程可以包含多個線程。 二、android 中的多進程模式 1. 通過給四大組件指定 android:process屬性,就可以開啟多進程模式。

<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity" android:process=":remote" /> <activity android:name=".ThirdActivity" android:process="com.example.mac.processdemo.remote" /> </application>

兩種方式的區(qū)別:

(1).“ : ”是指在當前的進程名前面附加上當前的報名,對于ThirdActivity中的聲明方式,它是一種完整的命名方式,不會附加包名信息。 (2).“ : ”開頭的進程屬于當前應(yīng)用的私有進程,其他應(yīng)用的組件不可以和它跑在同一個進程中;而進程名不以“ :”開頭的進程屬于全局進程 ,其它應(yīng)用通過ShareUID方式和它跑在同一個進程中。

Android系統(tǒng)為每個應(yīng)用分配一個唯一的UID,具有相同UID的應(yīng)用才能共享數(shù)據(jù)。兩個應(yīng)用通過ShareUID跑在同一個進程中是有要求的,需要這兩個應(yīng)用有相同的ShareUID并且簽名相同才可以。在這種情況下,它們可以互相訪問對方的私有數(shù)據(jù),比如data目錄,組件信息等。

2.多進程模式的運行機制

SecondActivity運行在一個單獨的進程中,Android為每一個應(yīng)用程序分配了一個獨立的虛擬機,或者說為每個進程都分配了一個獨立的虛擬機,不同的虛擬機在內(nèi)存分配上 有不同的地址空間,這就會導(dǎo)致在不同的虛擬機中訪問同一類的對象會產(chǎn)生多份副本。在一個進程中修改某個值只會影響當前進程,對其他進程不會造成任何影響。

所有運行在不同進程中的四大組件,只要它們之間如要通過內(nèi)存來共享數(shù)據(jù),都會失敗,這也是多進程所帶來的主要影響。

一般來說,使用多進程會造成如下幾方面的問題:

(1)靜態(tài)成員和單例模式完全失效 (2)線程同步機制完全失效 (3)SharedPreferences 的可靠性下降 (4)Application會多次創(chuàng)建(可以這么理解:運行在同一個進程中的組件是屬于同一個虛擬機和同一個Application的,運行在不同進程中的組件是屬于兩個不同的虛擬機和Application的) 1,2,3 因為為每個進程分配不容虛擬機造成的。 三、Android中實現(xiàn)IPC方式 1.使用Bundle —-> 用于android四大組件間的進程間通信 android的四大組件都可使用Bundle傳遞數(shù)據(jù) 所以如果要實現(xiàn)四大組件間的進程間通信 完全可以使用Bundle來實現(xiàn) 簡單方便

2.使用文件共享 —->用于單線程讀寫 這種方式在單線程讀寫的時候比較好用 如果有多個線程并發(fā)讀寫的話需要限制線程的同步讀寫 另外 SharePreference是個特例 它底層基于xml實現(xiàn) 但是系統(tǒng)對它的讀寫會基于緩存,也就是說再多進程模式下就變得不那么可靠了,有很大幾率丟失數(shù)據(jù)

3.使用Messenger —->用于可存放在message中的數(shù)據(jù)的傳遞 使用這個方式可以在不同進程間傳遞message對象 這是一種輕量級的IPC方案 當傳遞的對象可以放入message中時 可以考慮用這種方式 但是msg.object最好不要放 因為不一定可以序列化 這里寫圖片描述

4.AIDL android 接口定義語言 —->主要用于調(diào)用遠程服務(wù)的方法的情況 還可以注冊接口 (暫時未看) 5.ContentProvider方式 6.Socket方法實現(xiàn)Ipc 這種方式也可以實現(xiàn) 但是不常用 需要權(quán)限

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.access_NETWORK_STATE" />

最后 總結(jié)IPC通信方式 這里寫圖片描述


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 通渭县| 通州市| 习水县| 七台河市| 洛南县| 嘉鱼县| 宽城| 兴化市| 信丰县| 天祝| 体育| 浦东新区| 拉萨市| 乐陵市| 柘荣县| 汤阴县| 泰兴市| 南华县| 阳信县| 昌黎县| 长垣县| 白朗县| 塘沽区| 伊吾县| 乾安县| 大冶市| 乡城县| 高尔夫| 哈尔滨市| 灵璧县| 古丈县| 铅山县| 慈利县| 长垣县| 务川| 桐庐县| 景宁| 尖扎县| 新干县| 喀喇| 遂昌县|