Android架構師之路-進程和IPC架構(1),androidipc

來源:互聯網
上載者:User

Android架構師之路-進程和IPC架構(1),androidipc

1.IPC通訊

2.android進程概念

3.設定IPC通訊

4.IPC介面-定義和實現

5.IBinder介面的使用

6.IPC通訊三步驟

7.短程通訊和遠程通訊


1.先來看第一個大問題,什麼是ipc通訊?

         IPC(Inter-Process Communication)通訊是跨越兩個不同進程(process)的通訊。

         一般而言,一個android應用程式裡面的各組件(activity,service)都在一個進程裡面執行,這種通訊叫做短程通訊,這就意味著兩個activity在同一個進程裡面執行。

         相對來講的是遠程通訊:兩個組件(activity和service)分別在不同的進程裡面執行,兩者想要通訊,必須通過IPC通訊,這就是所謂的遠程通訊。

   IPC通訊效率:

         啟動app,android系統裡的Zygote服務孵化一個新的進程給app,然後將app載入到新誕生的進程中。

         基於Linux的安全限制,以及進程的基本特性,不同的進程的地址空間是獨立的,如果兩個類在同一個進程執行,兩者的溝通方便也快速

        不同進程內執行時,需要藉助IPC跨進程通訊了。

2.android的進程概念

     一個進程是一個獨立的執行空間,不會被正在其它進程裡的程式所侵犯。這種保護方法是Android的重要安全機制。於是,得先認識進程的內涵,才能進一步瞭解跨進程IPC機制。
      •在Android的進程裡,有一個虛擬機器(Virtual Machine,簡稱VM)的對象,可執行Java代碼,也引導JNI本地程式的執行,實現Java與C/C++之間的溝通


每一個進程在誕生時,都會誕生一個主線程(Main Thread),以及誕生一個Looper類的對象和一個MQ(Message Queue)資料結構。每當主線程作完事情,就會去執行Looper類。

主線程最主要的工作就是處理UI畫面的事件(Event),每當UI事件發生時,Android架構會丟資訊(Message)到MQ裡。主線程看到MQ有新的資訊時,就取出資訊,然後依據資訊內容而去執行特定的函數。執行完畢,就再繼續執行Looper類,不斷地觀察MQ的動態。

剛才說明了,當兩個類都在同一個進程裡執行時,兩者之間的溝通,只要採取一般的函數調用(Function Call)就行了,既快速又方便。一旦兩個類分別在不同的進程裡執行時,兩者之間的溝通,就不能採取一般的函數調用途徑了,只好採取IPC溝通途徑。


3.設定IPC通訊

在Android架構裡,一個應用(程式)套件(Application Package)通常

</pre>含有多個Java類(Class),這些類可以在同一個進程(Process)裡執行;也可以在不同的進程裡執行 。•通常,一個進程只會擺一支App。但是一支App可佔用多個進程。<p></p><p></p><pre code_snippet_id="636160" snippet_file_name="blog_20150404_2_1842967" name="code" class="html"><activity android:name=".FirstActivity" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter> </activity><activity android:name=".LoadActivity"></activity><service android:name=".LoadService" android:process=":remote" ><intent-filter><action android:name="com.misoo.pkm.REMOTE_SERVICE" /></intent-filter></service></manifest>

  android:process=":remote",通過設定這個屬性,將該service設定為單獨一個進程中,與其他的activity或者service隔離開來,這樣之,一個app中就會有兩個進程了

其中,FirstActivity和LoadActivity兩個類別會載入預設的進程裡。而LoadService則會載入於名為“remote”的獨立進程裡。


這樣,藍色豎線兩邊分別是兩個獨立的進程,各自運行這自己的程式,為了資料的安全起見,每個進程都需要獨立建立一個vm對象,獨享自己的資料,防止進程間資料共用,導致資料惡意篡改,不利於程式安全。

在Android的各進程裡,都有一個VM對象,執行Java代碼,也引導JNI本地程式的執行,實現Java與C/C++程式之間的溝通



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.