- 博客(8)
- 资源 (2)
- 收藏
- 关注
原创 WMS->窗口管理以及
java8很有意思,搞了很多lambda,以前比较抵触,现在学习wms,箭在弦上不得不发,所以进行了学习,这里以WMS中的使用来分析几个常用的接口 WMS读窗口的管理分为三级,大概的类结构如上图所示, 虽然类结构是扁平的,但是实例的层次结构确分为三层. 其中RootWindowContainer位于最上层,RootWindowContainer的mChildren集合所包含的子结构为Disp...
2018-04-23 14:02:57 1490
原创 AMS-stack(二) ActivityStack
由于篇幅问题第一篇介绍了栈的大管家,这篇介绍stack,ActivityStack类也比较恐怖有五千行代码,不过ActivityStack主要负对task的管理,对activity的管理,为ActivityStackSupervisor做了很多更底层的事情,对整个activity的管理最重要和繁多的一个环节,我们要想学习wms必须先搞清楚stack的逻辑,再搞清楚task的逻辑,最后将ams的情景...
2018-04-21 21:00:47 4371
原创 WMS->动画执行过程中位移的计算
mWin.mShownPosition为最终window的位置,计算过程主要参考了app transition动画,屏幕旋转动画,attach的window的动画,目标墙纸的动画进行计算,最终计算出动画窗口的位置,大小alpha值,函数很简单主要使用了一些线性代数的矩阵变换,只是简单的缩放平移旋转操作.void computeShownFrameLocked() { final...
2018-04-18 14:00:43 465
原创 WMS->stopFreezingScreen()冻屏总结
对于冻屏理解不深可能会认为冻屏会出现黑屏,不是这样的,恰恰相反,冻屏的目的就是防止执行默写操作的过程出现黑屏。冻屏的过程只是不接收输入和不执行动画,并且会截取屏幕进行显示。下面我们就来分下冻屏的过程。WMS暴露了一个可以通过binder调用执行的冻屏操作,是startFreezingScreen函数 @Override public void startFreezing...
2018-04-15 23:37:03 6778 1
原创 AMS->startUser过程分析
最近处理了一个多用户切换过程黑屏一小会的问题,记录下切换用户的过程. 这里先分析6.0系统再分析7.0系统,7.0系统添加了directBoot特性略有不同private boolean startUser(final int userId, final boolean foreground) { // 1 检查权限INTERACT_ACROSS_USERS_FULL ...
2018-04-14 18:43:43 1149
原创 AMS-stack(一) ActivityStackSupervisor
要想了解AMS这端的stack管理主要有三个类的代码要去分支,包括栈的大管家 ActivityStackSupervisor,,栈结构ActivityStack和task结构TaskRecord懒得画图。 Android对应用界面的管理分为五个层次 1 多个Display也就是多个屏幕,一般第一个屏幕为内置屏幕,第二个为hdmi,第三个为虚拟屏幕 2 每个Display上面包含多个类型的...
2018-04-10 23:20:58 4606
原创 ActivityStarter之startActivityUnchecked(()
ActivityStarter封装了一个activity启动的过程(包括上下文环境),不采用情景栈分析法真的很难分析,这里采用情景分析法把该函数分析. 整体代码如下: private int startActivityUnchecked(final ActivityRecord r, ActivityRecord sourceRecord, IVoiceIntera...
2018-04-01 17:28:08 4375
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人