Android開發中如何使用多線程


      想知道如何使用多進程,先要知道Android里的多進程概念。一般情況下,一個應用程序就是一個進程,這個進程名稱就是應用程序包名。我們知道進程是系統分配資源和調度的基本單位,所以每個進程都有自己獨立的資源和內存空間,別的進程是不能任意訪問其他進程的內存和資源的。那如何讓自己的應用擁有多個進程?很簡單,我們的四大組件在AndroidManifest文件中注冊的時候,有個屬性是android:process:這里可以指定組件的所處的進程。默認就是應用的主進程。指定為別的進程之后,系統在啟動這個組件的時候,就先創建(如果還沒創建的話)這個進程,然后再創建該組件。你可以重載Application類的onCreate方法,打印出它的進程名稱,就可以清楚的看見了。再設置android:process屬性時候,有個地方需要注意:如果是android:process=”:deamon”,以:開頭的名字,則表示這是一個應用程序的私有進程,否則它是一個全局進程。私有進程的進程名稱是會在冒號前自動加上包名,而全局進程則不會。一般我們都是有私有進程,很少使用全局進程。 

      使用多進程顯而易見的好處就是分擔主進程的內存壓力。我們的應用越做越大,內存越來越多,將一些獨立的組件放到不同的進程,它就不占用主進程的內存空間了。當然還有其他好處,有心人會發現Android后台進程里有很多應用是多個進程的,因為它們要常駐后台,特別是即時通訊或者社交應用,不過現在多進程已經被用爛了。典型用法是在啟動一個不可見的輕量級私有進程,在后台收發消息,或者做一些耗時的事情,或者開機啟動這個進程,然后做監聽等。還有就是防止主進程被殺守護進程,守護進程和主進程之間相互監視,有一方被殺就重新啟動它。應該還有還有其他好處,這里就不多說了。

      壞處的話,多占用了系統的空間,大家都這么用的話系統內存很容易占滿而導致卡頓。消耗用戶的電量。應用程序架構會變復雜,因為要處理多進程之間的通信。這里又是另外一個問題了。

      1.使用隱式intent實現簡單的進程間通信

      在AndroidManifest.xml文件中定義<activity> 說明: 1、一個<activity>包括: 零個或多個<intent-filter>標簽,它主要是作為匹配的標准,能否匹配成功由<action>、<category>、<data>三個tag共同決定的。然后就可以被其它進程啟動,用intent攜帶參數,實現通信。 

      2.通過service定義AIDL接口,有了Intent這種基於消息的進程內或進程間通信模型,我們就可以通過Intent去開啟一個Service,可以通過Intent跳轉到另一個Activity,不論上面的Service或Activity是在當前進程還是其它進程內即不論是當前應用還是其它應用的Service或Activity,通過消息機制都可以進行通信!

      但是通過消息機制實現的進程間通信,有一個弊端就是,如果我們的Activity與Service之間的交往不是簡單的Activity開啟Service操作,而是要隨時發一些控制請求,那么必須就要保證Activity在Service的運行過程中隨時可以連接到Service。

      AIDL接口方式適用於Activity與Service之間的通信,是遠程和本地服務通信機制。

      aidl 實現步驟和調用服務里面的方法有些不同

 1.把Iservice.java文件變成aidl文件 

 2.會自動生成一個Stub類 實現ipc 

 3.定義的中間人對象 直接繼承stub

 4.想要保證2個應用程序的aidl文件是同一個 要求aidl文件所在包名相同

 5.獲取中間人對象Stub.asinterface(Ibinder obj) 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM