Android IPC通訊機制之一

來源:互聯網
上載者:User

標籤:

IPC:Intent-process Communication,跨進程通訊。

    在一個應用程式中,可以很方便的開啟多進程。開啟進程的方式只有一種,只能在AndroidMenifest中為四大組件指定 Android:process屬性。

在非常規情況下,也可以通過JNI在native層去fork一個新的進程。

<activity            android:name=".MainActivity"            android:label="@string/app_name"            android:process=":process"            android:theme="@style/AppTheme.NoActionBar">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

 如上,便可開啟一個進程。也可以這樣,

   android:process="hang.myapplication.process"


這兩張方案有什麼區別那?
    第一種方式,“:”的含義是指要在當前的進程名上添加當前的包名,屬於當前應用的私人進程,其他應用的組件不會和它在一個進程中。
   第二種方式,它是一個完整的命名方式,不會附件包名資訊,該進程是全域進程,其他應用可以通過ShareUid方式和他在同一進程。

android系統會為每個應用程式指派一個唯一的UID,具有相同UID的應用才能共用資料。 

雖然開啟進程很方便,但是多進程會造成很多的問題出現,比如,記憶體無法共用資料。 


開啟進程後,SecondActity無法正確MainActivity修改的值。這是因為正常情況下,兩者共用同一記憶體,由於系統在建立新的進程同時分配獨立的虛擬機器,那麼兩者連統一虛擬都不在,何況記憶體。原理如下:user類在兩個進程中是獨立存在的,並且這兩個類互不干擾。


一般來說,使用多進程會造成如下幾個方面影響:
   1.靜態成員和單例模式完全失效。
  2.線程同步機制完全失效。
  3.SharedPreferences的可靠性下降。
  4.Application會多次建立。
由於會分配信的虛擬機器,那麼也就是重新啟動一個應用,自然會建立新的Application。實現跨進程通訊的方法有很多,比如Intent,SharedPreference,Binder,以及Socket 通訊。

Android IPC通訊機制之一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.