自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android應(yīng)用程序進(jìn)程啟動(dòng)過(guò)程的源代碼分析(八)

移動(dòng)開(kāi)發(fā) Android
上文的parseArgs.runtimeInit值為true,于是就繼續(xù)執(zhí)行RuntimeInit.zygoteInit進(jìn)一步處理了。接下來(lái)執(zhí)行RuntimeInit.zygoteInit這個(gè)函數(shù)。

由于在前面的Step 3中,指定了"--runtime-init"參數(shù),表示要為新創(chuàng)建的進(jìn)程初始化運(yùn)行時(shí)庫(kù),因此,上文的parseArgs.runtimeInit值為true,于是就繼續(xù)執(zhí)行RuntimeInit.zygoteInit進(jìn)一步處理了。接下來(lái):

Step 8. RuntimeInit.zygoteInit

這個(gè)函數(shù)定義在frameworks/base/core/java/com/android/internal/os/RuntimeInit.java文件中:

  1. [java] view plaincopypublic class RuntimeInit { 
  2.   ...... 
  3.   public static final void zygoteInit(String[] argv) 
  4.   throws ZygoteInit.MethodAndArgsCaller { 
  5.   // TODO: Doing this here works, but it seems kind of arbitrary. Find 
  6.   // a better place. The goal is to set it up for applications, but not 
  7.   // tools like am. 
  8.   System.setOut(new AndroidPrintStream(Log.INFO, "System.out")); 
  9.   System.setErr(new AndroidPrintStream(Log.WARN, "System.err")); 
  10.   commonInit(); 
  11.   zygoteInitNative(); 
  12.   int curArg = 0
  13.   for ( /* curArg */ ; curArg < argv.length; curArg++) { 
  14.   String arg = argv[curArg]; 
  15.   if (arg.equals("--")) { 
  16.   curArg++; 
  17.   break
  18.   } else if (!arg.startsWith("--")) { 
  19.   break
  20.   } else if (arg.startsWith("--nice-name=")) { 
  21.   String niceName = arg.substring(arg.indexOf('=') + 1); 
  22.   Process.setArgV0(niceName); 
  23.   } 
  24.   } 
  25.   if (curArg == argv.length) { 
  26.   Slog.e(TAG, "Missing classname argument to RuntimeInit!"); 
  27.   // let the process exit 
  28.   return
  29.   } 
  30.   // Remaining arguments are passed to the start class's static main 
  31.   String startClass = argv[curArg++]; 
  32.   String[] startArgs = new String[argv.length - curArg]; 
  33.   System.arraycopy(argv, curArg, startArgs, 0, startArgs.length); 
  34.   invokeStaticMain(startClass, startArgs); 
  35.   } 
  36.   ...... 
  37.   } 

這里有兩個(gè)關(guān)鍵的函數(shù)調(diào)用,一個(gè)是zygoteInitNative函數(shù)調(diào)用,一個(gè)是invokeStaticMain函數(shù)調(diào)用,前者就是執(zhí)行Binder驅(qū)動(dòng)程序初始化的相關(guān)工作了,正是由于執(zhí)行了這個(gè)工作,才使得進(jìn)程中的Binder對(duì)象能夠順利地進(jìn)行Binder進(jìn)程間通信,而后一個(gè)函數(shù)調(diào)用,就是執(zhí)行進(jìn)程的入口函數(shù),這里就是執(zhí)行startClass類(lèi)的main函數(shù)了,而這個(gè)startClass即是我們?cè)赟tep 1中傳進(jìn)來(lái)的"android.app.ActivityThread"值,表示要執(zhí)行android.app.ActivityThread類(lèi)的main函數(shù)。

我們先來(lái)看一下zygoteInitNative函數(shù)的調(diào)用過(guò)程,然后再回到RuntimeInit.zygoteInit函數(shù)中來(lái),看看它是如何調(diào)用android.app.ActivityThread類(lèi)的main函數(shù)的。

責(zé)任編輯:閆佳明 來(lái)源: bbs.9ria
相關(guān)推薦

2014-06-20 11:05:56

Android應(yīng)用程序進(jìn)程啟動(dòng)

2014-06-20 11:09:35

Android應(yīng)用程序進(jìn)程啟動(dòng)

2014-06-19 14:25:04

Android應(yīng)用程序進(jìn)程啟動(dòng)

2014-06-20 11:20:37

Android應(yīng)用程序進(jìn)程啟動(dòng)

2014-06-19 14:30:28

Android應(yīng)用程序進(jìn)程啟動(dòng)

2014-06-19 14:59:40

Android應(yīng)用程序進(jìn)程啟動(dòng)

2014-06-19 14:54:11

Android應(yīng)用程序進(jìn)程啟動(dòng)

2012-02-20 14:47:08

JavaPlay

2014-05-22 15:00:16

Android消息處理機(jī)制Looper

2011-08-17 16:16:29

iPhone應(yīng)用程序啟動(dòng)過(guò)程

2011-07-28 10:34:38

Cocoa 程序 啟動(dòng)

2014-06-23 10:31:09

Android啟動(dòng)過(guò)程

2011-06-28 13:27:13

ARM Linux

2014-07-31 10:06:01

谷歌Google應(yīng)用

2012-08-16 09:07:57

Erlang

2018-03-13 13:00:03

Linux運(yùn)維啟動(dòng)分析

2024-09-11 09:25:03

Tomcat組件PREP

2022-08-29 17:34:05

鴻蒙操作系統(tǒng)

2014-05-22 15:45:58

Android消息處理機(jī)制Looper

2009-08-14 17:57:43

ASP.NET MVC
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)