<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 功能強大 支持多語言、二開方便! 廣告
                ActivityManagerService也是由SystemServer創建的。假設通過startActivit來啟動一個新的Activity,而這個Activity附屬于一個還未啟動的進程,那么這個進程該如何啟動呢?先來看看ActivityManagerService中的startProcessLocked函數,代碼如下所示: **ActivityManagerService.java** ~~~ private final void startProcessLocked(ProcessRecordapp, String hostingType, String hostingNameStr){ ......//這個ActivityManagerService類很復雜,有14657行!!! if("1".equals(SystemProperties.get("debug.checkjni"))) { debugFlags |= Zygote.DEBUG_ENABLE_CHECKJNI; } if("1".equals(SystemProperties.get("debug.assert"))) { debugFlags |= Zygote.DEBUG_ENABLE_ASSERT; } //這個Process類是Android提供的,并非JDK中的Process類 intpid = Process.start("android.app.ActivityThread", mSimpleProcessManagement ?app.processName : null, uid, uid, gids, debugFlags, null); ...... } ~~~ 接著來看看Process的start函數,這個Process類是android.os.Process,它的代碼在Process.java中,代碼如下所示: **Process.java** ~~~ public static final int start(final StringprocessClass,final String niceName, int uid, int gid, int[] gids,intdebugFlags,String[] zygoteArgs) { //注意,processClass的值是"android.app.ActivityThread"。 if(supportsProcesses()) { try { //調用startViaZygote。 return startViaZygote(processClass, niceName, uid, gid, gids, debugFlags,zygoteArgs); } } } ~~~ **Process.java::startViaZygote()** ~~~ private static int startViaZygote(final StringprocessClass, final String niceName,final int uid, finalint gid,final int[] gids, intdebugFlags,String[] extraArgs) throws ZygoteStartFailedEx { int pid; ......//一些參數處理,最后調用zygoteSendArgsAndGetPid函數。 argsForZygote.add("--runtime-init");//這個參數很重要 argsForZygote.add("--setuid=" +uid); argsForZygote.add("--setgid=" + gid); pid =zygoteSendArgsAndGetPid(argsForZygote); return pid; } ~~~ **Process.java::zygoteSendArgsAndGetPid()** ~~~ private static intzygoteSendArgsAndGetPid(ArrayList<String> args) throwsZygoteStartFailedEx { intpid; // openZygoteSocketIfNeeded?是不是打開了和Zygote通信的Socket? openZygoteSocketIfNeeded(); try { //把請求的參數發到Zygote。 sZygoteWriter.write(Integer.toString(args.size())); sZygoteWriter.newLine(); sZygoteWriter.write(arg); sZygoteWriter.newLine(); } //讀取Zygote處理完的結果,便得知是某個進程的pid! sZygoteWriter.flush(); pid= sZygoteInputStream.readInt(); return pid; } ~~~ **Process.java** ~~~ private static void openZygoteSocketIfNeeded()throws ZygoteStartFailedEx { try { sZygoteSocket = new LocalSocket();//果真如此!! //連接Zygote sZygoteSocket.connect(new LocalSocketAddress(ZYGOTE_SOCKET, LocalSocketAddress.Namespace.RESERVED)); sZygoteInputStream = newDataInputStream(sZygoteSocket.getInputStream()); sZygoteWriter = new BufferedWriter( new OutputStreamWriter( sZygoteSocket.getOutputStream()),256); } } } } ~~~ 好了,ActivityManagerService終于向Zygote發送請求了。請求的參數中有一個字符串,它的值是“android.app.ActivityThread”。現在該回到Zygote處理請求那塊去看看了。 >[info]**注意**:由于ActivityManagerService駐留于SystemServer進程中,所以正是SS向Zygote發送了消息。
                  <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>

                              哎呀哎呀视频在线观看