• 面试中常聊 AMS,你是否又真的了解?


    在面试的时候,经常会被问到这些问题:

    • 对Activity的启动流程了解吗?
    • AMS在Android起到什么作用,简单分析下Android的源码
    • system_server为什么要在Zygote中启动,而不是由init直接启动呢?
    • 为什么要专门使用Zygote进程去孵化应用进程,而不是让system_server去孵化呢?
    • 能说说具体是怎么导致死锁的吗?
    • Zygote为什么不采用Binder机制进行IPC通信?

    每当这时候,内心真是一万只草泥马奔腾而过……

    大部分Android开发者一遇到这种面试题就直接懵逼了,不少人不是没有看过相关的解答,但也都只是浅尝辄止,没有深入掌握其中原理,面试的时候自然会被问个措手不及。

    下面这张图想必大家都看过,Google官方提供过一张经典的四层架构图,从下往上依次分为:Linux内核、系统库和Android运行时环境、框架层、应用层,其中每一层都包含大量的子模块或子系统。

    Android系统启动过程就是从下往上的一个过程:

    Loader → Kernel → Native → Framework → App

    其中,AMS(ActivityManagerService)是Android系统中一个特别重要的系统服务,也是与上层APP打交道最多的系统服务之一(几乎所有的APP应用都需要与AMS打交道),四大组件的启动、各个生命周期方法的调用基本都需要通过它来处理,所以它涉及到的知识点也非常多。想要了解Android的内部工作机制,就必须先了解AMS的工作原理

    比如在Activity的启动流程中,AMS就是组件管理调度中心,什么都不干,但什么都管!Android系统从开机到桌面,再到APP启动的完整流程,AMS无所不在……

    当我们深刻了解Android启动流程与AMS特性之后,就可以解决项目开发中的很多问题,比如:屏幕适配、自定义View和ViewGroup、APK加固、热修复、组件化路由、皮肤换肤、插件化、leakCanary内存问题分析、Hilt注入、Jetpack原理、Glide原理、RXJava原理、launch_mode、权限验证、四大组件等相关逻辑和代码……但AMS本身比较复杂、难以理解,许多工作多年的Android开发者也很难弄清AMS的作用。 同时,系统的整体运行过程就成为了大厂面试的重灾区。下图中就展示手机从开机到运行出桌面,再到在桌面上点击图标运行APP的完整的主线流程。

    如果你还没有掌握Framework,现在想要在最短的时间里吃透它,可以参考一下《Android Framework核心知识点》,里面内容包含了:Init、Zygote、SystemServer、Binder、Handler、AMS、PMS、Launcher……等知识点记录。

    《Framework 核心知识点汇总手册》:https://qr18.cn/AQpN4J

    Handler 机制实现原理部分:
    1.宏观理论分析与Message源码分析
    2.MessageQueue的源码分析
    3.Looper的源码分析
    4.handler的源码分析
    5.总结

    Binder 原理:
    1.学习Binder前必须要了解的知识点
    2.ServiceManager中的Binder机制
    3.系统服务的注册过程
    4.ServiceManager的启动过程
    5.系统服务的获取过程
    6.Java Binder的初始化
    7.Java Binder中系统服务的注册过程

    Zygote :

    1. Android系统的启动过程及Zygote的启动过程
    2. 应用进程的启动过程

    AMS源码分析 :

    1. Activity生命周期管理
    2. onActivityResult执行过程
    3. AMS中Activity栈管理详解

    深入PMS源码:

    1.PMS的启动过程和执行流程
    2.APK的安装和卸载源码分析
    3.PMS中intent-filter的匹配架构

    WMS:
    1.WMS的诞生
    2.WMS的重要成员和Window的添加过程
    3.Window的删除过程

    《Android Framework学习手册》:https://qr18.cn/AQpN4J

    1. 开机Init 进程
    2. 开机启动 Zygote 进程
    3. 开机启动 SystemServer 进程
    4. Binder 驱动
    5. AMS 的启动过程
    6. PMS 的启动过程
    7. Launcher 的启动过程
    8. Android 四大组件
    9. Android 系统服务 - Input 事件的分发过程
    10. Android 底层渲染 - 屏幕刷新机制源码分析
    11. Android 源码分析实战

  • 相关阅读:
    再见 Sidecars,eBPF 能否扛起新大旗?
    牛客2022暑期集训第一场C题 Grab the Seat! 题解
    opencv 没办法控制焦距怎么办?来试一下 pyuvc 吧
    Java实现就医保险管理系统 JAVA+Vue+SpringBoot+MySQL
    真空脱气机概述
    express学习36-多人管理28用户信息展示
    Zebec Protocol 成非洲利比亚展会合作伙伴,并将向第三世界国家布局
    js分割字符串
    回溯去重问题
    科创人·望繁信创始人索强:中国版流程挖掘注定有完全不同的活法
  • 原文地址:https://blog.csdn.net/weixin_61845324/article/details/133725258