掌握 Android 系统架构,看这一篇就够了!( 五 )

  • Input系统—UI线程(http://gityuan.com/2016/12/24/input-ui/)
  • Input系统—进程交互(http://gityuan.com/2016/12/31/input-ipc/)
  • Input系统—ANR原理分析(http://gityuan.com/2017/01/01/input-anr/)
  • PKMS服务
  • PackageManager启动篇(http://gityuan.com/2016/11/06/packagemanagerservice)
  • Installd守护进程(http://gityuan.com/2016/11/13/android-installd)
  • Alarm服务
  • 理解AlarmManager机制(http://gityuan.com/2017/03/12/alarm_manager_service/)
  • JobScheduler服务
  • 理解JobScheduler机制(http://gityuan.com/2017/03/10/job_scheduler_service/)
  • BatteryService
  • Android耗电统计算法(http://gityuan.com/2016/01/10/power_rank/)
  • PMS服务
  • DropBox服务
  • DropBoxManager启动篇(http://gityuan.com/2016/06/12/DropBoxManagerService/)
  • UserManagerService
  • 多用户管理UserManager(http://gityuan.com/2016/11/20/user_manager/)
  • 4.7 内存&&存储篇
    • 内存篇
    • Android LowMemoryKiller原理分析(http://gityuan.com/2016/09/17/android-lowmemorykiller/)
    • Linux内存管理(http://gityuan.com/2015/10/30/kernel-memory/)
    • Android内存分析命令(http://gityuan.com/2016/01/02/memory-analysis-command/)
    • 存储篇
    • Android存储系统之源码篇:http://gityuan.com/2016/07/17/android-io/
    • Android存储系统之架构篇:http://gityuan.com/2016/07/23/android-io-arch
    • Linux驱动篇
    • 敬请期待
    • dalvik/art
    • 解读Java进程的Trace文件:http://gityuan.com/2016/11/26/art-trace/
    4.8 工具篇
    再来说说Android相关的一些常用命令和工具以及调试手段 。
    序号文章名类别1理解Android编译命令(http://gityuan.com/2016/03/19/android-build/)build2理解Android.bp(http://gityuan.com/2018/06/02/android-bp/)build2性能工具Systrace(http://gityuan.com/2016/01/17/systrace/)systrace3Android内存分析命令(http://gityuan.com/2016/01/02/memory-analysis-command/)Memory4ps进程命令(http://gityuan.com/2015/10/11/ps-command/)Process5Am命令用法(http://gityuan.com/2016/02/27/am-command/)Am6Pm命令用法(http://gityuan.com/2016/02/28/pm-command/)Pm7调试系列1:bugreport源码篇(http://gityuan.com/2016/06/10/bugreport/)bugreport8调试系列2:bugreport实战篇(http://gityuan.com/2016/06/11/bugreport-2/)bugreport9dumpsys命令用法(http://gityuan.com/2016/05/14/dumpsys-command/)dumpsys10Android logd日志原理(http://gityuan.com/2018/01/27/android-log/)logd11介绍gdb调试工具(http://gityuan.com/2017/09/09/gdb/)gdb12介绍addr2line调试命令(http://gityuan.com/2017/09/02/addr2line/)addr2line
    4.9 实战篇
    下面列举处理过的部分较为典型的案例,供大家参考:
    序号文章名类别1Binder Driver缺陷导致定屏的案例(http://gityuan.com/2018/05/12/binder-driver-bug/)binder2深度解读ArrayMap优势与缺陷(http://gityuan.com/2019/01/13/arraymap/)ArrayMap3数组越界导致系统重启的案例(http://gityuan.com/2018/02/10/reboot-locked-method/)数组越界4一行Log引发多线程并发问题的案例(http://gityuan.com/2018/02/03/log-fc/)多线程并发5跑monkey压力测试过程的冻屏案例(http://gityuan.com/2018/02/17/monkey-deadlock/)monkey冻屏6深度剖析APP保活案例(http://gityuan.com/2018/02/24/process-keep-forever/)保活
    结束语
    Android系统之博大精深,包括Linux内核、Native、虚拟机、Framework,通过系统调用连通内核与用户空间,通过JNI打通用户空间的Java层和Native层,通过Binder、Socket、Handler等打通跨进程、跨线程的信息交换 。只有真正阅读并理解系统核心架构的设计,解决问题和设计方案才能做到心中无剑胜有剑,才能做到知其然知其所以然 。当修炼到此,恭喜你对系统有了更高一个层次的理解,正如太极剑法,忘记了所有招式,也就练成了太极剑法 。
    再回过头去看看那些API,看到的将不再是一行行代码、一个个接口的调用,而是各种信息的传递与交互工作,而是背后成千上万个小蝌蚪的动态执行流 。记得《侠客行》里面的龙木二岛主终其一生也无法参透太玄经,石破天却短短数日练成绝世神功,究其根源是龙木二岛主以静态视角去解读太玄经,而石破天把墙壁的图案想象成无数游动的蝌蚪,最终成就绝世神功 。一言以蔽之,程序代码是死的,系统运转是活的,要以动态视角去理解系统架构 。
    【掌握 Android 系统架构,看这一篇就够了!】作者:袁辉辉,安卓知名博主Gityuan,现就职于手机厂商,热衷于研究Android系统架构与内核技术,对Android系统框架有着深刻理解与丰富的实战经验 。




    推荐阅读