android IPC機制講解 一

2021-07-10 23:07:21 字數 1467 閱讀 1190

ipc是inter-process communication的縮寫,含義為程序間通訊或者誇程序通訊,指的是兩個程序之間進行資料交換的過程。

在android中最有特色的程序間通訊方式就是binder了 ,通過binder可以輕鬆的實現任意練個功終端之間的通訊。除了binder ,android還支援socket,通過socket也可以實現任意兩個終端之間的通訊。多程序的情況分為兩種:第一種是 乙個應用因為某些原因自身需要採用多程序模式來實現,至於原因,可能有很多,比如,有些模組由於特殊原因需要執行在單獨的程序中,又或者為了加大乙個應用可使用的記憶體所以需要通過多程序來獲取多份記憶體,android對單個應用所使用的最大可使用的記憶體做了限制,早起的一些版本可能是16mb,不同裝置有不同的大小。另一種情況是當前應用需要向其他應用獲取資料,由於是兩個應用,所以必須採用跨程序的方式來獲取所需要的資料,甚至我們通過系統提供的contentprovider去查詢資料的時候,其實也是一種程序間通訊。只不過,通訊細節被系統內部遮蔽了,所以我們無法感知而已。

正常情況下,在android中多程序是指乙個應用中存在多個程序的情況,因此這裡不討論兩個 應用之間的多程序情況、首先,在android中使用多程序只有一種方法,那就是給四大元件在androidmenifest中指定android:procress屬性,除此之外沒有別的方法,也就是說我們無法給乙個執行緒或者乙個實體類指定其執行時所在的程序。其實還有另一種非常規的多程序方法,那就是通過jni在native層去fork乙個新的程序。但是這種方法屬於特殊情況,也不是常用的穿件多程序的方式。因此我們暫時不考慮這種方式。

下面給示例:

上面展示了兩種指定程序的方式。activity和這個方式是 一樣的。當啟動messengerservice的時候系統會為他建立乙個單獨的程序,程序名字為"com.zxx.binderframework.remote"  當啟動bookmanagerservice的時候系統也會為他建立一單獨的程序,程序名字為「com.zxx.binderframework.remote」兩種指定命名的方式區別在於,「:」 的含義是指要在當前的程序名前面附加上當前的報名,這是 一種間歇的方法,對於另乙個來說,他是一種完整的命名方式,不會附加包名資訊,其次,程序名以";" 開頭的程序屬於當前應用的私有程序,其他應用的元件不可以和他泡在乙個程序中,而程序名不以";"開頭的程序屬於全域性程序,其他應用通過s哈熱uid方式可以和他跑在同乙個程序中。

我們知道android系統會為每乙個應用分配乙個唯一的uid,具有相同uid的應用才能共享資料,這裡要說明的是,兩個應用通過shareuid跑在同乙個程序中是有要求的。需要這兩個應用有相同的shareuid並且簽名相同才可以,在這種情況下,他們可以互相訪問對方的私有資料。比如,data目錄,元件資訊等,不管他們是否跑在同乙個程序中。當然,如果他們跑在同乙個程序中,那麼除了能共享data目錄,元件資訊,還可以共享記憶體資料,或者說,他們看起來就像是乙個應用的兩個部分。

ok,今天先寫到這裡。只是對於ipc做了很表層的介紹,後面會繼續對於ipc進行深入的探索。

訊息機制(GUI執行緒講解)

首先我們來畫乙個視窗 什麼是視窗控制代碼?在 有什麼用?什麼是訊息?什麼是訊息佇列?訊息佇列在哪 什麼是視窗過程?視窗過程是由誰呼叫的?沒有訊息迴圈視窗過程會執行嗎?為什麼要有w32k.sys這個模組?為什麼只有使用圖形介面的程式才可以訪問keservicedescriptortableshadow...

SSO 單點登入 實現機制講解

單點登入有許多開發商提供解決方案,本文以yale大學sso開源專案cas為例,介紹單點登入實現機制。sso single sign on,單點登入 tgt ticket granting ticket,使用者身份認證憑證票據 st service ticket,服務許可憑證票據 tgc ticket...

PHP快取機制的具體講解

普遍快取技術 資料快取 這裡所說的資料快取是指資料庫查詢快取,每次訪問頁面的時候,都會先檢測相應的快取資料是否存在,如果不存在,就連線資料庫,得到資料,並把查詢結果序列化後儲存到檔案中,以後同樣的查詢結果就直接從快取表或檔案中獲得。用的最廣的例子看discuz的搜尋功能,把結果id快取到乙個表中,下...