成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android應用程序進程啟動過程的源代碼分析(八)

移動開發 Android
上文的parseArgs.runtimeInit值為true,于是就繼續執行RuntimeInit.zygoteInit進一步處理了。接下來執行RuntimeInit.zygoteInit這個函數。

由于在前面的Step 3中,指定了"--runtime-init"參數,表示要為新創建的進程初始化運行時庫,因此,上文的parseArgs.runtimeInit值為true,于是就繼續執行RuntimeInit.zygoteInit進一步處理了。接下來:

Step 8. RuntimeInit.zygoteInit

這個函數定義在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.   } 

這里有兩個關鍵的函數調用,一個是zygoteInitNative函數調用,一個是invokeStaticMain函數調用,前者就是執行Binder驅動程序初始化的相關工作了,正是由于執行了這個工作,才使得進程中的Binder對象能夠順利地進行Binder進程間通信,而后一個函數調用,就是執行進程的入口函數,這里就是執行startClass類的main函數了,而這個startClass即是我們在Step 1中傳進來的"android.app.ActivityThread"值,表示要執行android.app.ActivityThread類的main函數。

我們先來看一下zygoteInitNative函數的調用過程,然后再回到RuntimeInit.zygoteInit函數中來,看看它是如何調用android.app.ActivityThread類的main函數的。

責任編輯:閆佳明 來源: bbs.9ria
相關推薦

2014-06-19 14:25:04

Android應用程序進程啟動

2014-06-20 11:05:56

Android應用程序進程啟動

2014-06-20 11:09:35

Android應用程序進程啟動

2014-06-19 14:30:28

Android應用程序進程啟動

2014-06-19 14:54:11

Android應用程序進程啟動

2014-06-19 14:59:40

Android應用程序進程啟動

2014-06-20 11:20:37

Android應用程序進程啟動

2012-02-20 14:47:08

JavaPlay

2014-05-22 15:00:16

Android消息處理機制Looper

2011-08-17 16:16:29

iPhone應用程序啟動過程

2011-07-28 10:34:38

Cocoa 程序 啟動

2011-06-28 13:27:13

ARM Linux

2014-06-23 10:31:09

Android啟動過程

2014-07-31 10:06:01

谷歌Google應用

2024-09-11 09:25:03

Tomcat組件PREP

2022-08-29 17:34:05

鴻蒙操作系統

2012-08-16 09:07:57

Erlang

2018-03-13 13:00:03

Linux運維啟動分析

2009-08-14 17:57:43

ASP.NET MVC

2010-12-13 11:40:17

Android應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧洲日韩 | 成人精品啪啪欧美成 | 日本在线精品视频 | 久久一区二区免费视频 | 久久久久九九九女人毛片 | 日韩久草 | 中文字幕日韩三级 | 欧美久久久久 | 免费三级av | 色综合久 | 亚洲国产第一页 | 亚洲欧美一区二区三区1000 | 国产精品美女久久久 | 精品久久九 | 大学生a级毛片免费视频 | 亚洲国产精品久久 | 亚洲欧美激情精品一区二区 | 久久久久久久久淑女av国产精品 | 日本亚洲精品 | 日韩国产一区二区三区 | 欧美一区视频在线 | 97人人超碰 | 成人免费大片黄在线播放 | 日韩激情免费 | 亚洲黄色在线 | 一区二区三区国产 | 亚卅毛片 | 污免费网站| 国产精品久久久久久中文字 | 亚洲色片网站 | 亚洲91| 伊人天堂网 | 99热欧美| 国产一区二区三区亚洲 | 亚洲免费一区 | 亚洲欧美日韩精品 | 九九亚洲 | 国产一区二区三区色淫影院 | 国产精品九九九 | 亚洲国产欧美在线 | 亚洲综合久久久 |