2023最新Android App启动流程面试题总结

一、系统启动

1.Android系统启动流程

Android系统架分为应用层,framework层,系统运行库层(Native),Linux内核层 启动按照一个流程:

Loader->kernel->framework->Application来进行的

1.Bootloader引导

  • 当电源按下时,引导芯片代码 从 ROM (4G)开始执行。Bootloader引导程序把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行,启动Linux内核。

  • Linux kernel 内核启动,会做设置缓存,加载驱动等一些列操作

  • 当内核启动完成之后,启动 init 进程,作为第一个系统进程, init 进程从内核态转换成用户态。

2.init进程启动

  • fork 出 ServerManager 子进程。 ServerManager主要用于管理我们的系统服务,他内部存在一个server服务列表,这个列表中存储的就是那些已经注册的系统服务。

  • 解析 init.rc 配置文件并启动 Zygote 进程

3.Zygote进程启动

  • 孵化其他应用程序进程,所有的应用的进程都是由zygote进程fork出来的。 通过创建服务端Socket,等待AMS的请求来创建新的应用程序进程。

  • 创建SystemServer进程,在Zygote进程启动之后,会通过ZygoteInit的main方法forkSystemServer进程

4.SystemServer进程启动

  • 创建SystemServiceManager,它用来对系统服务进行创建、启动和生命周期管理。

  • ServerManager.startService启动各种系统服务:WMS/PMS/AMS等,调用ServerManager的addService方,将这些Service服务注册到ServerManager里面

  • 启动桌面进程,这样才能让用户见到手机的界面。

5.Launcher进程启动

开启系统Launcher程序来完成系统界面的加载与显示。

2.SystemServer,ServiceManager,SystemServiceManager的关系

在SystemServer进程中创建SystemServiceManager, ServiceManager是系统服务管理者,SysytemServiceManager启动一些继承自SystemService的服务,并将这些服务的Binder注册到ServiceManager中,对于其他的一些继承于IBinder的服务,通过ServiceMaanager的addService方法添加。

SystemServer:

SystemServer是一个由zygote孵化出来的进程, 名字为system_server 。 SystemServer叫做系统服务进程,大部分Android提供的一些系统服务都运行在该进程中,包括AMS,WMS,PMS,这些系统的服务都是以一个线程的方式存在在SysyemServer进程中。

SystemServiceManager:

管理一些系统的服务,在SystemServer中初始化。启动各种系统服务:WMS/PMS/AMS等,调用ServerManager的addService方,将这些Service服务注册到ServerManager里面

ServiceManager:ServiceManager像是一个路由,Service把自己注册在ServiceManager中,客户端通过ServiceManager查询服务

  • 维护一个svclist列表来存储service信息。

  • 向客户端提供Service的代理,也就是BinderProxy。

  • 维护一个死循环,不断的查看是否有service的操作请求,如果有就读取相应的内核binder driver。

3. 孵化应用进程这种事为什么不交给SystemServer来做,而专门设计一个Zygote

    <
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以尝试回答一些 Android App 面试题,希望能对你有所帮助。 1. 什么是 Activity?它有哪些生命周期方法? Activity 是 Android 应用程序中的一个基本组件,用于呈现用户界面和处理用户交互。Activity 有如下生命周期方法: - onCreate() - onStart() - onResume() - onPause() - onStop() - onRestart() - onDestroy() 2. 什么是 Fragment?它有哪些生命周期方法? Fragment 是 Android 应用程序中的另一个基本组件,用于构建灵活的用户界面。Fragment 有如下生命周期方法: - onAttach() - onCreate() - onCreateView() - onViewCreated() - onStart() - onResume() - onPause() - onStop() - onDestroyView() - onDestroy() - onDetach() 3. 什么是 RecyclerView?它与 ListView 有什么区别? RecyclerView 是一个强大的 Android 视图组件,用于显示大量数据集合。与 ListView 相比,RecyclerView 具有更好的性能和灵活性,可以轻松实现复杂的布局和动画效果。此外,RecyclerView 还支持可定制的布局管理器和适配器,可用于实现不同类型的列表和网格视图。 4. 什么是 Intent?它有哪些类型?它们有什么区别? Intent 是 Android 应用程序中的一个基本组件,用于在不同的组件之间进行通信和交互。它有如下两种类型: - 显式 Intent:用于启动应用程序内的另一个组件,如 Activity、Service 或 BroadcastReceiver。 - 隐式 Intent:用于启动其他应用程序中的组件,如系统应用程序或第三方应用程序。 5. 什么是 Service?它与 Activity 有什么区别? Service 是 Android 应用程序中的一个基本组件,用于在后台执行长时间运行的任务,如下载文件、播放音乐或处理网络请求。与 Activity 不同,Service 没有用户界面,通常在后台默默地运行。此外,Service 可以与其他应用程序组件通信,如 Activity 和 BroadcastReceiver。 希望这些简答能够帮助你更好地了解 Android App 开发。如果你有更深入的问题,欢迎继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值