<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                #### 2.2.1 開啟多進程模式 **正常情況下,在Android中多進程是指一個應用中存在多個進程的情況**,因此這里不討論兩個應用之間的多進程情況。**首先,在Android中使用多進程只有一種方法,那就是給四大組件(Activity、Service、Receiver、ContentProvider)在AndroidMenifest中指定android:process屬性,除此之外沒有其他辦法,也就是說我們無法給一個線程或者一個實體類指定其運行時所在的進程**。其實還有另一種非常規的多進程方法,那就是通過JNI在native層去fork一個新的進程,但是這種方法屬于特殊情況,也不是常用的創建多進程的方式,因此我們暫時不考慮這種方式。下面是一個示例,描述了如何在Android中創建多進程: <activity android:name="com.ryg.chapter_2.MainActivity" android:configChanges="orientation|screenSize" android:label="@string/app_name" android:launchMode="standard" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity <activity android:name="com.ryg.chapter_2.SecondActivity" android:configChanges="screenLayout" android:label="@string/app_name" android:process=":remote" /> <activity android:name="com.ryg.chapter_2.ThirdActivity" android:configChanges="screenLayout" android:label="@string/app_name" android:process="com.ryg.chapter_2.remote" /> 上面的示例分別為SecondActivity和ThirdActivity指定了process屬性,并且它們的屬性值不同,這意味著當前應用又增加了兩個新進程。 * 假設當前應用的包名為“com.ryg. chapter_2”,當SecondActivity啟動時,系統會為它創建一個單獨的進程,進程名為“com.ryg.chapter_2:remote”; * 當ThirdActivity啟動時,系統也會為它創建一個單獨的進程,進程名為“com.ryg.chapter_2.remote”。 * 同時入口Activity是MainActivity,沒有為它指定process屬性,那么它運行在默認進程中,默認進程的進程名是包名。 下面我們運行一下看看效果,如圖2-1所示。**進程列表末尾存在3個進程,進程id分別為645、659、672**,這說明我們的應用成功地使用了多進程技術,是不是很簡單呢?這只是開始,實際使用中多進程是有很多問題需要處理的。 :-: ![](https://img.kancloud.cn/f0/6f/f06f641333b506f3c5f5f074fca2055b_577x597.png) 圖2-1 系統進程列表 除了在Eclipse的DDMS視圖中查看進程信息,還可以用shell來查看,命令為:`adb shell ps`或者`adb shell ps | grep com.ryg.chapter_2`。其中com.ryg.chapter_2是包名,如圖2-2所示,通過ps命令也可以查看一個包名中當前所存在的進程信息。 :-: ![](https://img.kancloud.cn/f6/9e/f69e9a912077aff8138a1f713e9cc072_1322x153.png) 圖2-2 通過ps命令來查看進程信息 不知道讀者朋友有沒有注意到,SecondActivity和ThirdActivity的android:process屬性分別為“`:remote`”和“`com.ryg.chapter_2.remote`”,那么這兩種方式有區別嗎? 其實是有區別的,區別有兩方面: * 首先,“:”的含義是指要在當前的進程名前面附加上當前的包名,這是一種簡寫的方法,對于SecondActivity來說,它完整的進程名為`com.ryg.chapter_2:remote`,這一點通過圖2-1和2-2中的進程信息也能看出來,而對于ThirdActivity中的聲明方式,它是一種完整的命名方式,不會附加包名信息; * 其次,**進程名以“:”開頭的進程屬于當前應用的私有進程,其他應用的組件不可以和它跑在同一個進程中,而進程名不以“:”開頭的進程屬于全局進程,其他應用通過ShareUID方式可以和它跑在同一個進程中**。 我們知道**Android系統會為每個應用分配一個唯一的UID,具有相同UID的應用才能共享數據**。這里要說明的是,**兩個應用通過ShareUID跑在同一個進程中是有要求的,需要這兩個應用有相同的ShareUID并且簽名相同才可以。在這種情況下,它們可以互相訪問對方的私有數據,比如data目錄、組件信息等,不管它們是否跑在同一個進程中**。 當然*如果它們跑在同一個進程中,那么除了能共享data目錄、組件信息,還可以共享內存數據,或者說它們看起來就像是一個應用的兩個部分*。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看