每一个Android开发,根本都了解或许学习过体系的常识,一是由于国内软件职业内卷,找作业时“面试造火箭,作业拧螺丝”的局面导致的,另一方面,从客观角度来讲,学习Android体系、Framework 等源代码或许其作业方式也能够提升我们,带来以下优点:

  1. 学习 Android 体系源码能够让开发者更深入地了解体系内部的作业原理和机制,以及各个模块之间的联系。这能够协助开发者更好地运用体系提供的功能和资源,以及更好地进行调试和优化。
  2. 学习 Android Framework 等源码能够协助开发者掌握更高级的开发技术,例如自定义控件、优化功能等。这些技术能够让开发者更好地应对杂乱的开发需求和问题。
  3. 学习 Android Framework 等源码能够让开发者更好地了解体系的作业原理,以及各个模块之间的交互和协作。这能够协助开发者更快地定位问题、优化代码,而且进步开发效率。
  4. 假如开发者需求开发定制化的 Android 体系,例如适配特定设备或职业应用,学习 Android 体系源码是必要的。只有深入了解体系的完成原理和机制,才能对体系进行有用的修改和定制。
  5. 涨工资真的很快,赚钱很多,钱多了就能够娶媳妇儿,让家人过上好日子。

可是体系学习不是必须的,只有从事体系定制开发的同学,才有必要学习,其他人彻底没必要,没有必要弄理解按下开关发生了什么?点亮屏幕是怎样做的?

一般的开发者更重要的是学习Framework的常识。

部分人的苦恼

关于Framework的学习从未间断过,可是在作业中也没有运用过,而且学了就忘,我便是这部分人的典型代表,不学感觉完成不了人生抱负,学了常常置疑人生。

那为什么是这样呢?

关于不熟悉的常识记忆是很困难的,特别是蜻蜓点水的学习方式,由于Framework的学习都是在大神的基础上跟流程的。

时序图,解决这个苦恼

时序图能展现代码的履行流程,就算记不住,只需有它在,根本能回想起来的。这篇文章从今天开始,会搜集或许总计各种Android 底层的、应用层的、对我们开发有用的各种时序图。听懂点赞、关注、收藏

常见的体系时序图

Android体系运转时序图

时序图思维导图式的记忆模式: 巩固Android SDK源码阅读

  1. 设备发动:设备发动时会运转 Bootloader,Bootloader 会加载并运转内核。
  2. 内核发动:内核发动后会发动 init 进程,该进程会初始化体系服务和应用程序框架,并发动 Zygote 进程。
  3. Zygote 进程发动:Zygote 进程是 Android 体系中的一个特别进程,它担任创立和办理应用程序进程。Zygote 进程会预加载一些常用的类和资源,以进步应用程序的发动速度。
  4. 应用程序进程发动:当用户翻开一个应用程序时,Zygote 进程会根据应用程序的包名创立一个新的进程,并在该进程中发动应用程序的主 Activity。应用程序进程会运转应用程序的代码,并与体系其他组件进行交互,如访问体系服务和接纳广播等。
  5. 关机进程:当用户封闭设备时,Android 体系会向应用程序发送封闭信号,应用程序会进行相应的整理操作,并在完成后退出。最后,体系会封闭进程和服务,并最终封闭设备。

Android 体系发动时序图

体系的发动很杂乱,这是一个大致的发动流程,

时序图思维导图式的记忆模式: 巩固Android SDK源码阅读

  1. 用户按下电源按钮,发动 Android 体系。
  2. 发动引导程序加载引导程序。
  3. 引导程序加载内核。
  4. 内核初始化体系。
  5. 初始化程序发动 Zygote。
  6. Zygote 发动体系服务。
  7. 体系服务初始化 PackageManagerService。
  8. 体系服务初始化 WindowManagerService。
  9. 体系服务初始化 PhoneInterfaceManager。
  10. 体系服务初始化 ActivityManagerService。
  11. 体系服务初始化其他体系服务。
  12. 体系服务发动发动器。
  13. 发动器发动应用程序。
  14. 应用程序发动活动。
  15. 活动调用 onCreate 办法。
  16. 活动调用 onStart 办法。
  17. 活动调用 onResume 办法。

Activity 发动流程

(Android 10(API level 29))注意,具体的发动流程还有很多细节,这是一个大致流程

时序图思维导图式的记忆模式: 巩固Android SDK源码阅读

  1. 用户恳求发动一个 Activity。
  2. ActivityManagerService 调用 instrumentation 的 onCreate() 办法。
  3. instrumentation 创立一个新的 ActivityThread 目标,并将其回来给 ActivityManagerService。
  4. ActivityManagerService 运用新创立的 ActivityThread 目标调用其 attach() 办法。
  5. ActivityThread 创立一个新的 Application 目标并将其回来给 ActivityThread。
  6. Application 回来新创立的 Application 目标给 ActivityManagerService。
  7. ActivityManagerService 运用新创立的 Application 目标调用 ActivityThread 的 bindApplication() 办法。
  8. ActivityThread 调用 Application 的 onCreate() 办法。
  9. Application 从 onCreate() 办法回来给 ActivityThread。
  10. ActivityThread 带着新创立的 Application 目标回来给 ActivityManagerService。
  11. ActivityManagerService 调用 AMS 的 scheduleLaunchActivity() 办法。
  12. ActivityThread 调用 Activity 的 onCreate() 办法。
  13. Activity 从 onCreate() 办法回来给 ActivityThread。
  14. ActivityThread 调用 AMS 的 scheduleResumeActivity() 办法。
  15. Activity 调用 onStart() 办法。
  16. Activity 从 onStart() 办法回来给 AMS。
  17. ActivityThread 调用 AMS 的 scheduleResumeActivity() 办法。
  18. Activity 调用 onResume() 办法。
  19. Activity 从 onResume() 办法回来给 AMS。

总结

此文章会常常更新,也会搜集大佬们的梳理流程,然后放在这儿,将其打造成一篇简单的流程字典。