Android源码分析--启动时序图

Android6.0系统启动流程分析三:SystemServer进程 在上一篇博客 Android6.0系统启动流程分析二:zygote进程一文中,我们队Zygote进程的有了一定的了解。我们知道Zygote进程会启动SystemServer进程,但我们并没有在上篇文章中分析SystemServer进程的相关内容。这篇博客,我们将目标汇聚在SystemServer进程上,看看这个进程都做了什么事情。 SystemServer启动流程参考如下时序图: 下面将分阶 阅读详情

为什么Android系统启动比较慢

Build的产物中最重要的是三个镜像文件,位于/out/target/product/<product_name>/目录下
ramdisk.img:在启动时将被Linux内核挂载为只读分区,它包含了/init文件和一些配置文件。它用来挂载其他系统镜像并启动init进程。


解析步骤:

Init.c (system\core\init)    
Init.c
{
main(
......
init_parse_config_file("/init.rc");
)
}
在/init.rc中找关键字 -Xzygote
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
    class main
    socket zygote stream 660 root system
    onrestart write /sys/android_power/request_state wake
    onrestart write /sys/power/state on
    onrestart restart media
    onrestart restart netd


步骤二

App_main.cpp (frameworks\base\cmds\app_process)    5397    2013/4/24
    if (zygote) {
           AndroidRuntime  runtime;
        runtime.start("com.android.internal.os.ZygoteInit",
                startSystemServer ? "start-system-server" : "");
}

ZygoteInit.java (frameworks\base\core\java\com\android\internal\os)    
   if (argv[1].equals("start-system-server")) {
                startSystemServer();//启动native和监听事件有关系
    }
startSystemServer(){
com.android.server.SystemServer
}
SystemServer.java (frameworks\base\services\java\com\android\server)
main{
init1 ;//native   com.android.server.SystemServer.cpp
}

步骤三

com_android_server_SystemServer.cpp (frameworks\base\services\jni)    
init
com.android.server.SystemServer.cpp
{
      extern "C" int system_init();
}
System_init.cpp (frameworks\base\cmds\system_server\library)    

system_init(){
    Native开启
    
    init2();
}

步骤四:

SystemService.java (frameworks\base\core\java\android\os)
  public static final void init2() {
        Slog.i(TAG, "Entered the Android system server!");
        Thread thr = new ServerThread();
        thr.setName("android.server.ServerThread");
        thr.start();
    }   
            Slog.i(TAG, "Init Watchdog");
            Watchdog.getInstance().init(context, battery, power, alarm,
                    ActivityManagerService.self());

system_init(){
Native 开启

runtime->callStatic("com/android/server/SystemServer","init2");
}

ServerThread  extends Thread
 public void run() {
Activity Manager
Package  Manager
 }


时序图附件:

http://download.youkuaiyun.com/detail/javamov/7568845



=============================================

init.c

挂载

    mkdir("/dev", 0755);
    mkdir("/proc", 0755);
    mkdir("/sys", 0755);

    mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755");
    mkdir("/dev/pts", 0755);
    mkdir("/dev/socket", 0755);
    mount("devpts", "/dev/pts", "devpts", 0, NULL);
    mount("proc", "/proc", "proc", 0, NULL);
    mount("sysfs", "/sys", "sysfs", 0, NULL);




=====================关键点(android启动慢):

ZygoteInit.java

             细节:

                  在main方法会预加载进2000类,通过反射proloadClasses();








































Android深入四大组件(二)Service的启动过程 此前我们用较长的篇幅来介绍Android应用程序的启动过程(根Activity的启动过程),这一篇我们接着来分析Service的启动过程。建议阅读此篇文章前,请先阅读Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章。 阅读详情

相关推荐

Android startAdvertising流程 & Bluedroid源码分析

在Android系统中,startAdvertising是用于启动低功耗蓝牙(BLE)广播流程的关键方法。

byte轻骑兵的技术小窝 1337

Android中Service的启动过程时序图

Android中Service的启动过程时序图 参考: 《Android系统源代码情景分析》

handy周 1174

android启动时序图

Android启动时序图 描述的是Android启动的流程

Android Service的启动过程

本文是《Android进阶解密》的读书笔记。所以,可能不会为大家提供多少帮助,我写本文的目的只是为了自己再学习的时候能够有个印象,为自己提供一个方便。 Service的启动过程分为两个部分,分别是ContextImpl到ActivityManagerService的调用过程和ActivityThread启动Service的过程。 一、ContextImpl到ActivityManagerService的调用过程 我们在Activity中启动Service首先调用startService方法,它在Con

小小时光 792

UE4_UE5 自定义简单水材质(UE材质图表大全1)

首先是材质的颜色节点、粗糙度节点、透明度节点。(1/2/3/4键+右键空白处,可创建一/二/三/四维节点)接着是两个法线波动节点的叠加。最后是折射节点,将fresnel菲涅尔节点连接到材质结果节点的折射输入端。到这里,你基本已经实现了一个波纹流动的水材质。后续我会更新加上海面浪花的水面材质,可以到我的专栏中寻找。有问题随时私信沟通,加油❤。

shanlinhan的博客 1989

用PLECS搞定三相逆变器电流环:从传递函数推导到PI参数整定的保姆级教程

本文提供了一份详细的PLECS教程,指导如何从传递函数推导到PI参数整定,实现三相逆变器电流环的闭环控制。通过坐标变换、控制器设计和仿真验证等步骤,帮助工程师快速掌握电流环控制技术,提升电力电子系统的稳定性和可靠性。

weixin_27102543的博客 399

android service启动过程,Android进阶(五):Service启动过程(最详细&最简单)

1.前言最近一直在看 《Android进阶解密》 的一本书,这本书编写逻辑、流程都非常好,而且很容易看懂,非常推荐大家去看看(没有收广告费,单纯觉得作者写的很好)。今天就介绍Service 2种启动方式中:startService启动 (基于Android 8.0 系统)。本文提供一种看源码的思路,因此bindService启动流程就没有再本文展开(与startService流程类似)。2.Con...

weixin_36193418的博客 905

从碰撞电离到雪崩击穿:Sentaurus仿真中的模型选择与验证艺术

本文深入探讨了Sentaurus TCAD中雪崩击穿模型的选取与验证方法,特别关注平行平面结的仿真实践。通过对比Chynoweth、van Overstraeten等主流模型的适用场景与精度差异,结合具体案例展示了从几何建模到边界条件设定的完整验证流程,并针对非理想因素提供了有效的补偿技术,助力工程师提升器件仿真的准确性与可靠性。

weixin_29074295的博客 592

Android: Activity的启动流程(基于Android 13)

以上就是今天要讲的内容,本文仅仅简单地走了一遍在Android13中Activity的启动流程,只是有些许变化,整体流程思路还是和以前版本一致。想要了解源码思路,画时序图还是很有帮助的,跟踪代码不迷路。两块三刀。

Hunter2916的博客 814

贝叶斯神经网络(Bayesian Neural Network)

最近在研究贝叶斯神经网络,一些概念一直搞不清楚,这里整理一下相关内容,方便以后查阅。

梁小憨憨的博客 3656

西门子S7-200 SMART 实战解析:滑动平均值滤波算法在模拟量信号处理中的应用

本文详细解析了在西门子S7-200 SMART PLC中实现滑动平均值滤波算法的实战应用。通过处理模拟量信号如温度、压力等,该算法有效抑制信号干扰,提升系统稳定性。文章涵盖算法原理、程序框架、信号采集及调试优化,为工业自动化工程师提供实用指南。

gitlab7runner的博客 1156

安卓14中Zygote初始化流程及源码分析

日志抓取 结合日志与源码分析 systemServer zygote创建时序图 一般应用 zygote 创建时序图 向 zygote socket 发送数据时序图

分享Android应用和系统开发、音视频编码、性能优化相关知识 1468

智慧工地算法视频分析服务器区域入侵检测AI视频分析技术在煤矿的实战应用

通过实时分析和处理井下视频资料,智慧矿山算法视频分析服务器不仅能够及时发现并预警人员违规行为和设备异常状况,还能够通过智能分析预防潜在的安全风险,从而显著提高煤矿的安全管理水平和生产效率。

EasyDarwin开源社区技术博客 562

Android进阶(四):Activity启动过程(最详细&最简单)

1.前言 最近一直在看 《Android进阶解密》 的一本书,这本书编写逻辑、流程都非常好,而且很容易看懂,非常推荐大家去看看(没有收广告费,单纯觉得作者写的很好)。 上一篇简单的介绍了Android进阶(三):Application启动过程(最详细...

测试0901-1 196

机器人视觉实战:用OpenCV搞定手眼标定(附完整C++代码)

本文详细介绍了使用OpenCV实现机器人视觉中的手眼标定技术,包括核心算法、工业场景优化及完整C++代码示例。通过解析坐标系转换问题,提供从数据采集到标定验证的全流程解决方案,帮助开发者在复杂工业环境中实现高精度机械臂与视觉系统的协同作业。

weixin_29306571的博客 482

《手把手教你YOLOv9实战》,改进专栏目录

为了提供友好的操作效果,本专栏将会手把手搭建可视化界面,我将用PyQt5 搭建一个可视化界面,可视化界面能够实现基本的图像加载与检测功能,如支持视频、摄像头,还支持更换不同的 YOLOv9 模型,并适应不同领域(如口罩检测系统、人脸检测系统、工业缺陷检测系统等),界面灵活、功能强大。通过YOLOv9加以改进设计,形成新的算法框架,一起水科研和论文,专栏会一直持续更新中,本专栏适合目标检测、分割、分类。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2158

Android11 Service绑定流程分析

Android11 Service绑定流程分析 上一篇我们介绍了Android11 Service启动流程,这一篇我们接着介绍Service绑定流程。service的绑定流程有一部分与启动流程是重合的我们就不重复介绍了,例如:服务没有启动的时候会先走创建启动service的流程。这里只分析它的绑定流程。不了解Service的启动流程的可以查看我的这一篇文章《Android 11 Service启动流程分析》 service绑定流程调用时序图 service绑定流程源码分析 我们一般在使用中会调用bindSe

guojingbu的博客 913

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Zygote进程原理简单介绍,源码解析

Zygote功能和Java部分主要方法源码解读

wodongx123的博客 1861

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

AndroidL 开机展示Keyguard锁屏机制初探

目录 目录 锁屏时序图 开机启动到PhoneWindowManager的systemReady方法 锁屏加载流程 PhoneWindowManager KeyguardServiceDelegate KeyguardServiceWrapper KeyguardService Keyguard...

测试0901-1 600

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android API 28 StartActivity源码分析

基于Android API 28的源码分析startActivity流程 一、时序图 startActivity启动时序图如下 二、流程分析 2.1

lynnlee_36的博客 345

【Android】Android Framework系列--Launcher3各启动场景源码分析

Launcher3的启动场景主要包括: 开机后启动:开机时,android ams服务拉起Launcher 按键启动:比如短压home键,android wms中的PhoneWindowManager拉起Launcher 异常崩溃后启动:Launcher异常崩溃后,android ams再次拉起Launcher

林多 3107

【binder】【android12】【2.servicemanager启动——全源码分析】

经过上一篇,我们已经知道servermanager的框架,那么本篇便从源码的角度分析servermangaer服务的启动流程。第一步:首先init进程启动后会读取各个进程的rc启动文件,然后会去启动servermanager服务。第二步:在servermanager服务的main函数中,首先会打开/dev/binder驱动,并申请一块内存,通过mmap的进行内存映射,将servermanager服务的用户空间映射到驱动中,从而会减少数据的拷贝。

handsomethefirst的博客 1485

android系统SystemServer进程启动流程分析

管理的是普通的服务,只能在同一个进程之间使用的服务,不具备进程之间通信能力的服务,各个系统service在启动的过程中都会调用LocalServices.addService()把自己的local service注册到LocalServices中,比如AMS,WMS,PMS。所以通过这里可以看到binder之前通信的时候最大的传递数据大小是1M-8K(同步),异步场景下是减半,binder驱动最多可以创建的线程数是15个,不包含主线程,包含的话是16个,上面这部分牵扯到binder驱动源码的分析,

博客 1465

源码分析 — PackageManagerService(二)之resolveIntent()

一、概述 二、resolveIntent()解析 2.1 resolveIntent()解析时序图 2.2 resolveIntent()源码 三、小结 一、概述 背景 在源码分析 — Activity的清单注册校验及动态注入一文中,我们通过AppGlobals.getPackageManager() 方法获取了IPackageManager的接口实现...

Elson的博客 2679

Android之AlarmManagerService源码分析

AlarmManager实质上是一个全局定时器,是Android中常用的一种系统服务级别的提示服务,在指定时间或周期性启动其他组件(Activity、Service、BroadcastReceiver)。 之前有篇文章专门介绍了AlarmManager定时器的使用方法,获取到服务后,调用该服务的一些设置方法,在设定时间到达后就会启动指定的组件。 AlarmManagerService和JobS

不落航班 1万+

【android 9】【input】【4.input启动—全源码分析】

Android 9 input篇3 启动流程分析

handsomethefirst的博客 1291
上一篇: 多媒体基础学习之显示大图像
下一篇: 网络访问频繁的项目---ThreadManager(线程池管理类)
linuxMinx
博客等级 码龄15年 195粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值