android framework 分析(二)

启动 Zygote

-Xzygote /system/bin --zygote--start-system-server

AndroidRuntime->AppRuntime

int main(int argc,const char* constargv[])

{

  AppRuntimeruntime;生成AndroidRuntime实例

  ...

 AndroidRuntime.Start("com.android.internal.os.ZygoteInit",startSystemServer);

}

其中AndroidRuntime.Start("com.android.internal.os.ZygoteInit",startSystemServer);

呼叫Android::Start(constchar* className,const bool startSystemServer)

/framework/base/core/jni/AndroidRuntime.cpp

该函数的处理内容:

1.处理Jave VirtualMachine的一些参数选项;

2.创建DalvikJava虚拟机,JNI_CreateJavaVM(&mJavaVM,&env,&initArgs);

3.注册AndroidRuntime中的JNI接口给虚拟机;

4.呼叫Java类com.android.internal.os.ZygoteInit的main函数


com.android.internal.os.ZygoteInit的main函数中,

1.注册Zygotesocket用来接收请求;

2.加载preloadedclass、resources用来加快启动速度,文件清单在framework.jar中的preloaded-classes,framework-res.apk中的res中;

3.启动System Server;

 fork出独立的进程名称为system-server,呼叫com.android.server.SystemServer类的main函数;

 在HandleSystemServerProcess函数中,RuntimeInit.ZygoteInit调用会呼叫AppRuntime的OnZygoteInit函数

4.RuntimeInit.ZygoteInit函数会呼叫com.android.server.SystemServer类的main函数。

 在此main函数中,系统首先加载android_server共享库libandroid_server.so源代码位于/framework/base/service/jni

 在该库中有定义JNI_OnLoad函数,所以Dalvik在加载libandroid_server.so的时候会首先呼叫该JNI_OnLoad函数,该函数将androidserver注册到Java虚拟机中,包括KeyInputQueue,HardwareService,AlarmManager,BatteryService,SensorService,SystemServer等;

 呼叫在libanroid_server.so中注册的native函数init1,该函数位于/frameworks/base/services/jni/com_android_server_SystemServer.cpp中;

 init1函数呼叫libsystem_server中的system_init函数,该函数位于/frameworks/base/cmds/system_server/library/system_init.cpp中,该函数将SurfaceFlinger/AudioFlinger/MediaPlayer/CameraService等组件注册到ServiceManager中

 system_init函数反过来呼叫java类com.android.server.SystemServer的init2函数;

5.在init2函数中,android创建了serverthread,在该thread中android开始注册各种service到servicemanager中

包括EntropyService,PowerManager,ActivityManager,Telephony,PackageManager,ContentManager,ContentProvider,

BatteryService,HardwareService,AlarmManager等等。

 注意该线程使用Looper来执行thread

至此android systemserver启动完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值