android system_server中的dump_Android 10.0系统启动之SystemServer进程(二)

本文深入解析Android 10.0系统中SystemServer进程启动后的流程,包括main函数创建SystemServer对象并运行run()方法,初始化系统变量,加载类库,创建服务管理器,并启动各种服务。
摘要由CSDN通过智能技术生成

感谢您的阅读与点赞!欢迎点击右上角关注:「大猫玩程序」

微信公众号:大猫玩程序

1ae6b0b164fe9312f89b36b3a7fef281.png

上一节讲解了SystemServer的架构以及被Zygote 进程fork的流程,这一节重点讲解SystemServer启动后做了什么, 加载了哪些服务。

Android 10.0系统源码取经之路——启动篇

Android系统架构浅析-「Android取经之路」

Android是怎么启动的-「Android取经之路」

Android 10.0系统启动之init进程(二)-「Android取经之路」

Android 10.0系统启动之init进程(二)-「Android取经之路」

Android 10.0系统启动之init进程(三)-「Android取经之路」

Android 10.0系统启动之init进程(四)-「Android取经之路」

Android 10.0系统启动之Zygote进程(一)-「Android取经之路」

Android 10.0系统启动之Zygote进程(二)-「Android取经之路」

Android 10.0系统启动之Zygote进程(三)-「Android取经之路」

Android 10.0系统启动之Zygote进程(四)-「Android取经之路」

Android 10.0系统启动之SystemServer进程(一)

4.2 SystemServer 启动后的流程

18fe8afa265442e0e4a21f6b27ff19be.png

4.2.1[SystemServer.java] main

说明:main函数由Zygote进程 fork后运行,作用是new 一个SystemServer对象,再调用该对象的run()方法

源码:

public static void main(String[] args) {

//new 一个SystemServer对象,再调用该对象的run()方法

new SystemServer().run();

}

4.2.2[SystemServer.java] run

说明:先初始化一些系统变量,加载类库,创建Context对象,创建SystemServiceManager对象等候再启动服务,启动引导服务、核心服务和其他服务

源码:

private void run() {

try {

traceBeginAndSlog("InitBeforeStartServices");

// Record the process start information in sys props.

//从属性中读取system_server进程的一些信息

SystemProperties.set(SYSPROP_START_COUNT, String.valueOf(mStartCount));

SystemProperties.set(SYSPROP_START_ELAPSED, String.valueOf(mRuntimeStartElapsedTime));

SystemProperties.set(SYSPROP_START_UPTIME, String.valueOf(mRuntimeStartUptime));

EventLog.writeEvent(EventLogTags.SYSTEM_SERVER_START,

mStartCount, mRuntimeStartUptime, mRuntimeStartElapsedTime);

//如果一个设备的时钟是在1970年之前(0年之前),

//那么很多api 都会因为处理负数而崩溃,尤其是java.io.File#setLastModified

//我把把时间设置为1970

if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {

Slog.w(TAG, "System clock is before 1970; setting to 1970.");

SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);

}

//如果时区不存在,设置时区为GMT

String timezoneProperty = SystemProperties.get("persist.sys.timezone");

if (timezoneProperty == null || timezoneProperty.isEmpty()) {

Slog.w(TAG, "Timezone not set; setting to GMT.");

SystemProperties.set("persist.sys.timezone

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值