从源码解析Android系统模块架构

本文详细解析了Android系统的架构原理,包括PackageManagerService、ActivityManagerService的工作机制,以及Activity、Window、View之间的关系等内容。同时还介绍了Activity的生命周期、布局加载流程、启动流程等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android的系统架构

http://www.jianshu.com/p/2e14ca7ee678

Android的系统架构图


深入理解PackageManagerService

https://blog.youkuaiyun.com/Innost/article/details/47253179


深入理解ActivityManagerService

https://blog.youkuaiyun.com/innost/article/details/47254381

ActivityManagerService架构剖析
https://www.jianshu.com/p/17b2844b2a27


Window 、WindowManager和WindowManagerService

在这里插入图片描述

WindowManager 原文 https://juejin.im/post/6844903991348822030
系统窗口的添加过程
Activity 的添加过程
Window 的更新过程

WindowManagerService 原文 https://juejin.im/post/6844903993135611911
WMS 的职责、WMS 创建过程、WMS 重要成员、Window 的添加过程、Window 删除过程


Application生命周期

https://blog.youkuaiyun.com/maican666/article/details/77257878

  1. onCreate() 程序创建的时候执行
  2. onTerminate() 程序终止的时候执行
    在模拟环境下执行。当终止应用程序对象时调用,不保证一定被调用,
    当程序是被内核终止以便为其他应用程序释放资源,那么将不会提醒,
    并且不调用应用程序Application对象的onTerminate方法而直接终止进程。
  3. onLowMemory() 低内存的时候执行
    好的应用程序一般会在这个方法里面释放一些不必要的资源来应付当后台程序已经终止,
    前台应用程序内存还不够时的情况。
  4. onConfigurationChanged(Configuration newConfig) 配置改变时触发这个方法。
  5. onTrimMemory(int level)程序在进行内存清理时执行

应用进程启动流程

http://blog.youkuaiyun.com/qq_23547831/article/details/51119333


Android Activity生命周期

Activity生命周期

Activity启动流程: http://blog.youkuaiyun.com/qq_23547831/article/details/51224992

  • Activity的启动流程一般是通过调用startActivity或者是startActivityForResult来开始的

  • startActivity内部也是通过调用startActivityForResult来启动Activity,只不过传递的requestCode小于0

  • Activity的启动流程涉及到多个进程之间的通讯这里主要是ActivityThread与ActivityManagerService之间的通讯

  • ActivityThread向ActivityManagerService传递进程间消息通过ActivityManagerNative,ActivityManagerService向ActivityThread进程间传递消息通过IApplicationThread。

ActivityManagerService接收到应用进程创建Activity的请求之后会执行初始化操作,解析启动模式,保存请求信息等一系列操作。

  • ActivityManagerService保存完请求信息之后会将当前系统栈顶的Activity执行onPause操作,并且IApplication进程间通讯告诉应用程序继承执行当前栈顶的Activity的onPause方法;

  • ActivityThread接收到SystemServer的消息之后会统一交个自身定义的Handler对象处理分发;

  • ActivityThread执行完栈顶的Activity的onPause方法之后会通过ActivityManagerNative执行进程间通讯告诉ActivityManagerService,栈顶Actiity已经执行完成onPause方法,继续执行后续操作;

  • ActivityManagerService会继续执行启动Activity的逻辑,这时候会判断需要启动的Activity所属的应用进程是否已经启动,若没有启动则首先会启动这个Activity的应用程序进程;

  • ActivityManagerService会通过socket与Zygote继承通讯,并告知Zygote进程fork出一个新的应用程序进程,然后执行ActivityThread的mani方法;

  • 在ActivityThead.main方法中执行初始化操作,初始化主线程异步消息,然后通知ActivityManagerService执行进程初始化操作;

  • ActivityManagerService会在执行初始化操作的同时检测当前进程是否有需要创建的Activity对象,若有的话,则执行创建操作;

  • ActivityManagerService将执行创建Activity的通知告知ActivityThread,然后通过反射机制创建出Activity对象,并执行Activity的onCreate方法,onStart方法,onResume方法;

  • ActivityThread执行完成onResume方法之后告知ActivityManagerService onResume执行完成,开始执行栈顶Activity的onStop方法;

  • ActivityManagerService开始执行栈顶的onStop方法并告知ActivityThread;

  • ActivityThread执行真正的onStop方法;


Activity布局加载流程

http://blog.youkuaiyun.com/qq_23547831/article/details/51284556

  • Activity的展示界面的特性是通过Window对象来控制的;

  • 每个Activity对象都对应这个一个Window对象,并且Window对象的初始化在启动Activity的时候完成,在执行Activity的onCreate方法之前;

  • 每个Window对象内部都存在一个FrameLayout类型的mDector对象,它是Acitivty界面的root view;

  • Activity中的window对象的实例是PhoneWindow对象,PhoneWindow对象中的几个成员变量mDector,mContentRoot,mContentParent都是View组件,它们的关系是:mDector –> mContentRoot –> mContentParent –> 自定义layoutView

  • LayoutInflater.inflate主要用于将布局文件加载到内存View组件中,也可以设定加载到某一个父组件中;

  • 典型的Activity的onCreate方法中需要调用super.onCreate方法和setContentView方法,若不调用super.onCreate方法,执行启动该Activity的逻辑会报错,若不执行setContentView的方法,该Activity只会显示一个空页面。


Android 中的Activity、Window、View之间的关系

http://www.cnblogs.com/kest/p/5141817.html


ActivityThread的主要工作及实现机制

http://www.cnblogs.com/younghao/p/5126408.html


应用进程Context创建流程

http://blog.youkuaiyun.com/qq_23547831/article/details/51252082

Android Context 是什么?

https://blog.youkuaiyun.com/feiduclear_up/article/details/47356289

  • Context类是一个抽象类,具体实现在ContextImpl类中;而ContextWrapper是Context的一个包装类(装饰器模式),其里面所有的方法实现都是调用其内部mBase变量的方法,而mBase就是ContextImpl对象
  • ContextThemeWrapper中扩展了主题相关的方法。Application和Service是继承自ContextWrapper,而Activity是继承自ContextThemeWrapper(Activity在启动的时候系统都会加载一个主题)

Context继承关系图:
Context继承关系图


Binder 详解

图解 Binder 机制
https://blog.youkuaiyun.com/u013309870/article/details/105328743
完整的client和service的通信流程
Binder详解脑图
Binder详解脑图

  • 漫天尘沙 图解 Binder
    https://www.cnblogs.com/samchen2009/p/3316001.html
    其中Binder 类图
    Native 实现: IBinder, BBinder, BpBinder, IPCThread, ProcessState, IInterface, etc
    Java 实现: IBinder, Binder, BinderProxy, Stub, Proxy.
    Binder Driver: binder_proc, binder_thread, binder_node, etc.

SharedPreferences的源码设计及优缺点

https://blog.youkuaiyun.com/mq2553299/article/details/109134825
Google官方已经准备用DataStore替换SharedPreferences,链接如下
https://developer.android.com/topic/libraries/architecture/datastore

Android 性能优化 – MMKV使用与原理
https://blog.youkuaiyun.com/CSqingchen/article/details/106344399


Android LruCache和Glide LruCache源码分析

https://blog.youkuaiyun.com/zhongyili_sohu/article/details/105969763

Camera 相关


Android页面恢复

Android的页面恢复采用以下两个方法:
onSaveInstanceState(Bundle outState)
onRestoreInstanceState(Bundle savedInstanceState)

onSaveInstanceState: 当Activity容易被系统销毁时,会触发该方法,比如:用户点击Home键、 用户点击Home键,切换到其他应用程序、有电话来了等附加操作


Android虚拟机 Android App运行的沙箱原则

浅析Android沙箱模型 https://blog.youkuaiyun.com/ljheee/article/details/53191397


Android技术难点

多进程的运用,经常会启动例如定位、推送等需要在后台开启动的进程来来保证主进程的内存运行;所以合理的使用多进程也是十分必要的;
事件分发一直是Android开发的难点之一,也是必须掌握的;
关于handler机制也是android的一块难点,因为包括Asynctask、系统启动、Intentservice等底层都是通过handler来实现的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清霜辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值