Android framework
文章平均质量分 88
从源码出发,学习记录framework核心某块的架构原理。
起司锅仔
这个作者很懒,什么都没留下…
展开
-
ActivityManagerService bindService(7)
Android中Service是一个非常常用的组件,尤其是系统应用开发时,Service使用甚至会比Activity的频率更高。先说一下为什么需要Service吧,在刚刚接触Android开发的时候我非常不理解Service是什么,会把他和线程搞混,认为Service的作用和一个线程差不多,当时还在想为什么需要Service,直接启动一个线程来做需要做的工作不就行了吗?原创 2024-09-22 16:14:48 · 1114 阅读 · 0 评论 -
ActivityManagerService 分发广播(6)
上一节我们看了发送广播流程,主要是将广播信息封装至BroadcastRecord,然后通过BroadcastQueueImpl/BroadcastQueueModernImpl的enqueueBroadcastLocked来发送广播。这一节我们来看一下AMS是怎么分发广播的流程,BroadcastQueueImpl/BroadcastQueueModernImpl是两套策略,只是分发的模式不同,我们主要关心流程,策略细节就不去关注了,我们这里就挑BroadcastQueueImpl来看一下分发的流程。原创 2024-09-20 23:19:24 · 1156 阅读 · 0 评论 -
ActivityManagerService 发送广播(5)
AMS主要管理的四大组件,Activity,Service,Broadcast,ContentProvider。其中Activity和Service有一定类似,ContentProvider使用的场景比较少,广播的使用场景还是比较多的,常常用于跨进程通信,在系统中系统应用和系统通信使用的更多。广播的使用非常方便,比直接使用aidl binder更加容易,所以一般如果通信频率不是非常高,都会通过广播来做进程间通信,我们这一节就来看一下app发送广播SystemServer做了什么。原创 2024-09-19 22:22:07 · 596 阅读 · 0 评论 -
ActivityManagerService app状态流转(4)
等生命周期,前面在介绍Activity启动流程时,我们提到过SystemServer会通过ClientTransaction来通知app更新生命周期状态变化,以前SystemServer和app会来回通信,onCreate、onResume都会通过binder回调app侧,而新版本的Android在这里做了一定的优化,SystemServer只会通过一次binder通知app要达到的最终状态,app侧会自己控制状态流转到目标状态,这样就减少了binder通信的次数。原创 2024-09-18 21:41:54 · 902 阅读 · 0 评论 -
ActivityManagerService 启动进程(3)
上一节我们介绍了Activity的启动流程,这一节会在上一节的基础上介绍当要启动的Activity所在的进程之前没有启动,这个情况下是怎么样启动一个新的进程,并且继续启动Activity。我们知道Android是基于linux系统开发的,而linux系统启动一个应用进程都是通过原来的进程fork出来的,Android里面的app都是通过Zygote进程fork启动的。原创 2024-09-17 19:46:15 · 1418 阅读 · 0 评论 -
ActivityManagerService Activity的启动流程(2)
提到ActivityManagerService,最重要的流程之一就是启动Activity了。原创 2024-09-16 15:36:02 · 2132 阅读 · 0 评论 -
ActivityManagerService 简述(1)
Activity启动流程是一个非常重要的流程,它对我们理解app生命周期会有非常大的帮助,Activity启动会分两个场景,一个是进程之前并未启动的情况,需要启动进程,另一个是进程之前已经启动了,我们之需要启动Activity即可。我们会分别来看这两个情况,其中我们还可以了解到app进程是如何启动的,了解这个流程会让应用开发者对Android app进程和平时接触的四大组件有更好的理解。除此之外我们还会了解一下广播和服务是如何实现的,这两个流程相对于Activity而言会简单一些。原创 2024-09-16 15:33:50 · 478 阅读 · 0 评论 -
WindowManagerService 窗口动画(7)
WMS中有会有操作窗口动画的过程,这个动画的原理本质和app是一样的,就是每一个VSync不断更新窗口的属性(位置,大小,透明度等等)。我们基于窗口显示的动画,来研究一下这个流程,主要分两个流程,一个是窗口设置以及触发的点,另一个是动画的实现原理。原创 2024-08-05 22:41:18 · 949 阅读 · 0 评论 -
WindowManagerService 核心函数relayout(6)
WMS中最重要的一个方法就是这个relayout,当窗口的树结构、大小等发生变化,就会通过这个方法重新计算所有窗口的位置,大小等属性。其中还包括对Insets的计算等等。这个方法触发的路径很多,app UI变化binder调用触发,窗口动画触发,WMS窗口的一些属性变化,Insets变化等等都会调用这个方法来重新对所有的窗口进行计算。原创 2024-08-05 22:39:10 · 1287 阅读 · 0 评论 -
WindowManagerService Inset(5)
窗口中有一个Inset的概念,比较常见的主要是状态栏,导航栏,输入法。我们先来说说Inset的作用,前面我们已经了解了WMS树是怎么管理窗口信息的,我们平时在使用app时,点击输入框后弹出输入法,输入法窗口可以把我们app窗口往上抬,前面我们知道输入法窗口所在的节点是13,14层,而app窗口所在节点是第2层,并不是父子关系或者直接的兄弟节点。这种关联如果仅仅靠之前树的结构不太好实现,Inset就是用来实现处理这种场景的。原创 2024-08-05 22:35:48 · 1014 阅读 · 0 评论 -
WindowManagerService添加窗口流程(4)
添加窗口流程是WMS很重要的一个功能,如果你是一个app开发,基本上接触WMS最多的场景也就是这个流程,在添加悬浮窗的时候使用的addView就是这个流程,其实activity也是通过类似的流程去添加显示的窗口的,我们会通过介绍addView这个流程了解添加窗口这个过程。和之前介绍SurfaceFlinger一样,在继续了解WMS之前,我们先来介绍一下app和WMS的binder通信架构,以便我们后面更好的了解WMS的其他流程。原创 2024-08-05 22:31:10 · 1085 阅读 · 0 评论 -
WindowManagerService 核心数据结构(2)
在开始看代码之前,我们先来了解一下WMS的核心数据结构,后续WMS很多的操作都是基于这些数据结构的,了解完这些类之后可以更加便于我们看具体流程代码。WMS用一个树结构来记录所有的窗口,其中里面有许多不同类型的节点,用来代表不同的业务。原创 2024-08-05 22:24:16 · 688 阅读 · 0 评论 -
WindowManagerService简述(1)
Android的系统服务都是运行在SystemServer里的,和GUI直接相关的主要是ActivityManagerService(后面就简称AMS)和WindowManagerService(后面就简称WMS),我们先来研究WMS,了解WMS后对学习AMS会有比较大的帮助,而且我们之前才看完SurfaceFlinger,WMS和SurfaceFlinger的关系比较紧密。 看完之前SurfaceFlinger章节后我们知道,SurfaceFlinger就是对一些layer上的内容进行合成,形成最终上原创 2024-08-05 22:22:03 · 286 阅读 · 0 评论