每一个Android开发,根本都了解或许学习过体系的常识,一是由于国内软件职业内卷,找作业时“面试造火箭,作业拧螺丝”的局面导致的,另一方面,从客观角度来讲,学习Android体系、Framework 等源代码或许其作业方式也能够提升我们,带来以下优点:
- 学习 Android 体系源码能够让开发者更深入地了解体系内部的作业原理和机制,以及各个模块之间的联系。这能够协助开发者更好地运用体系提供的功能和资源,以及更好地进行调试和优化。
- 学习 Android Framework 等源码能够协助开发者掌握更高级的开发技术,例如自定义控件、优化功能等。这些技术能够让开发者更好地应对杂乱的开发需求和问题。
- 学习 Android Framework 等源码能够让开发者更好地了解体系的作业原理,以及各个模块之间的交互和协作。这能够协助开发者更快地定位问题、优化代码,而且进步开发效率。
- 假如开发者需求开发定制化的 Android 体系,例如适配特定设备或职业应用,学习 Android 体系源码是必要的。只有深入了解体系的完成原理和机制,才能对体系进行有用的修改和定制。
- 涨工资真的很快,赚钱很多,钱多了就能够娶媳妇儿,让家人过上好日子。
可是体系学习不是必须的,只有从事体系定制开发的同学,才有必要学习,其他人彻底没必要,没有必要弄理解按下开关发生了什么?点亮屏幕是怎样做的?
一般的开发者更重要的是学习Framework的常识。
部分人的苦恼
关于Framework的学习从未间断过,可是在作业中也没有运用过,而且学了就忘,我便是这部分人的典型代表,不学感觉完成不了人生抱负,学了常常置疑人生。
那为什么是这样呢?
关于不熟悉的常识记忆是很困难的,特别是蜻蜓点水的学习方式,由于Framework的学习都是在大神的基础上跟流程的。
时序图,解决这个苦恼
时序图能展现代码的履行流程,就算记不住,只需有它在,根本能回想起来的。这篇文章从今天开始,会搜集或许总计各种Android 底层的、应用层的、对我们开发有用的各种时序图。听懂点赞、关注、收藏
常见的体系时序图
Android体系运转时序图
- 设备发动:设备发动时会运转 Bootloader,Bootloader 会加载并运转内核。
- 内核发动:内核发动后会发动 init 进程,该进程会初始化体系服务和应用程序框架,并发动 Zygote 进程。
- Zygote 进程发动:Zygote 进程是 Android 体系中的一个特别进程,它担任创立和办理应用程序进程。Zygote 进程会预加载一些常用的类和资源,以进步应用程序的发动速度。
- 应用程序进程发动:当用户翻开一个应用程序时,Zygote 进程会根据应用程序的包名创立一个新的进程,并在该进程中发动应用程序的主 Activity。应用程序进程会运转应用程序的代码,并与体系其他组件进行交互,如访问体系服务和接纳广播等。
- 关机进程:当用户封闭设备时,Android 体系会向应用程序发送封闭信号,应用程序会进行相应的整理操作,并在完成后退出。最后,体系会封闭进程和服务,并最终封闭设备。
Android 体系发动时序图
体系的发动很杂乱,这是一个大致的发动流程,
- 用户按下电源按钮,发动 Android 体系。
- 发动引导程序加载引导程序。
- 引导程序加载内核。
- 内核初始化体系。
- 初始化程序发动 Zygote。
- Zygote 发动体系服务。
- 体系服务初始化 PackageManagerService。
- 体系服务初始化 WindowManagerService。
- 体系服务初始化 PhoneInterfaceManager。
- 体系服务初始化 ActivityManagerService。
- 体系服务初始化其他体系服务。
- 体系服务发动发动器。
- 发动器发动应用程序。
- 应用程序发动活动。
- 活动调用 onCreate 办法。
- 活动调用 onStart 办法。
- 活动调用 onResume 办法。
Activity 发动流程
(Android 10(API level 29))注意,具体的发动流程还有很多细节,这是一个大致流程
- 用户恳求发动一个 Activity。
- ActivityManagerService 调用 instrumentation 的 onCreate() 办法。
- instrumentation 创立一个新的 ActivityThread 目标,并将其回来给 ActivityManagerService。
- ActivityManagerService 运用新创立的 ActivityThread 目标调用其 attach() 办法。
- ActivityThread 创立一个新的 Application 目标并将其回来给 ActivityThread。
- Application 回来新创立的 Application 目标给 ActivityManagerService。
- ActivityManagerService 运用新创立的 Application 目标调用 ActivityThread 的 bindApplication() 办法。
- ActivityThread 调用 Application 的 onCreate() 办法。
- Application 从 onCreate() 办法回来给 ActivityThread。
- ActivityThread 带着新创立的 Application 目标回来给 ActivityManagerService。
- ActivityManagerService 调用 AMS 的 scheduleLaunchActivity() 办法。
- ActivityThread 调用 Activity 的 onCreate() 办法。
- Activity 从 onCreate() 办法回来给 ActivityThread。
- ActivityThread 调用 AMS 的 scheduleResumeActivity() 办法。
- Activity 调用 onStart() 办法。
- Activity 从 onStart() 办法回来给 AMS。
- ActivityThread 调用 AMS 的 scheduleResumeActivity() 办法。
- Activity 调用 onResume() 办法。
- Activity 从 onResume() 办法回来给 AMS。
总结
此文章会常常更新,也会搜集大佬们的梳理流程,然后放在这儿,将其打造成一篇简单的流程字典。