android WMS
文章平均质量分 89
kc专栏
深入探索android Framework层代码,博客持续更新中!!!
展开
-
Android6.0 WMS(八) 显示Activity的启动窗口
在Android系统中,Activity组件在启动之后,并且在它的窗口显示出来之前,可以显示一个启动窗口。这个启动窗口可以看作是Activity组件的预览窗口,是由WindowManagerService服务统一管理的,即由WindowManagerService服务负责启动和结束。在本文中,我们就详细分析WindowManagerService服务启动和结束Activity组件的启动窗口原创 2017-01-04 11:10:11 · 3944 阅读 · 1 评论 -
Android6.0 WMS(三) WMS窗口次序
这篇博客我们主要分析下,窗口位置排序的一些原理。一、添加窗口的时候 调整窗口位置上篇博客我们分析了WMS的addWindow函数,这里我们就窗口的次序问题继续分析。 boolean imMayMove = true; if (type == TYPE_INPUT_METHOD) {//如果窗口类是输入法窗口原创 2016-12-08 18:56:14 · 3155 阅读 · 1 评论 -
Android6.0 WMS(一) WMS和应用进程的关系
之前在分析Activity的时候有很多和WMS相关的,我们这里再简单总结下和WMS相关的那部分。一、appToken在WMS中创建在博客http://blog.csdn.net/kc58236582/article/details/52413871中在APPWindowToken创建过程这节中,我们分析到在AMS调用startActivityLocked的时候,会调用WMS的add原创 2016-11-08 11:10:14 · 3924 阅读 · 0 评论 -
Android6.0 VSync信号如何到用户进程
在http://blog.csdn.net/kc58236582/article/details/52763534博客的VSync信号的分发过程那节中我们已经详细分析了VSync信号的分发过程,其中EventThread主要就是发送VSync信号。一、DisplayEventReceiver.java这里我们先从DisplayEventReceiver这个java类来分析:我们原创 2016-10-22 15:36:49 · 4792 阅读 · 0 评论 -
Andrdoid6.0 DisplayManagerService
之前在分析power模块的时候,需要设置背光那个时候分析过DisplayManagerService,但是不够详细、系统。前面在分析WMS旋转屏幕的时候,也涉及到了DisplayManagerService,所以我准备详细分析下。一、缺省设备我们先看DisplayManagerService在SystemServer中调用的顺序。先是构造了对象,然后调用了windowManagerAndI原创 2016-12-22 16:44:24 · 4076 阅读 · 0 评论 -
Activity WMS ViewRootImpl三者关系(Activity创建窗口 按键分发等)
今天我们来梳理下Activity ViewRootImpl和WMS三者的关系,这里面看了网上的博客,也看了一些书,加上自己的总结,写了这篇博客。1. Activity我们先来看Activity,在ActivityThread中的performLaunchActivity函数中, 先创建了Activity,然后调用了Activity的attach函数 ......原创 2016-08-02 15:10:58 · 9524 阅读 · 0 评论 -
wm命令(wm size)修改屏幕尺寸
wm size可以查看当前屏幕分辨率,也可以设置屏幕分辨率(当然也就一般调试问题wm size)。一、Wm源码我们先来看下wm源码,Wm.java中关于wm size部分。 private void runDisplaySize() throws Exception { String size = nextArg(); int w, h;原创 2017-01-10 17:03:40 · 22525 阅读 · 1 评论 -
Android6.0 WMS(十) WMS窗口动画从设置到显示框架
在前一文中,我们分析了Activity组件的切换过程。从这个过程可以知道,所有参与切换操作的窗口都会被设置切换动画。事实上,一个窗口在打开(关闭)的过程中,除了可能会设置切换动画之外,它本身也可能会设置有进入(退出)动画。再进一步地,如果一个窗口是附加在另外一个窗口之上的,那么被附加窗口所设置的动画也会同时传递给该窗口。在之前WMS的第六篇博客窗口管理,主要从VSync信号作为切入点分析窗口动原创 2017-01-09 19:00:31 · 4221 阅读 · 1 评论 -
Android6.0 WMS(十一) WMS窗口动画生成及播放
上一篇我们我们分析到有VSync信号过来,最后会调用WindowAnimator的animateLocked函数来生成和播放动画,这篇我们我们主要从这个函数开始分析。animateLocked函数当VSync信号过来后在WMS中如果调用了scheduleAnimationLocked函数。就会调用animateLocked函数 private void animateLocked原创 2017-01-12 15:13:26 · 3111 阅读 · 0 评论 -
Android6.0 WMS(九) WMS切换Activity窗口(App Transition)的过程分析
在Android系统中,同一时刻只有一个Activity组件是处于激活状态的,因此,当ActivityManagerService服务激活了一个新的Activity组件时,它就需要通知WindowManagerService服务将该Activity组件的窗口显示出来,这会涉及到将焦点和屏幕等资源从前一个激活的Activity组件切换到后一个激活的Activity组件的过程,本文就详细分析这原创 2017-01-05 18:31:53 · 5104 阅读 · 2 评论 -
Android6.0 WMS(二) WMS创建窗口与创建Surface的关系
在上篇博客我们知道ViewRootImpl的setView函数会调用WindowSession的addToDisplay函数,这个函数通过Binder最终会调用WMS的addWindow函数,增加窗口。在http://blog.csdn.net/kc58236582/article/details/52413871博客中WindowState的创建过程那节中有详细分析,当然这部分主要是围绕Surf原创 2016-12-08 11:09:54 · 4115 阅读 · 0 评论 -
Android6.0 WMS(四) WMS中常用变量分析
这篇博客我们分析WMS的一些常用变量,我们依然从主线addWindow开始分析,碰到一些常用的变量再进行分析。DisplayContent我们再来看如下DisplayContent 类 final DisplayContent displayContent = getDisplayContentLocked(displayId);我们再来看getDis原创 2016-12-13 18:10:08 · 2166 阅读 · 0 评论 -
Android6.0 WMS(七) 窗口Z轴位置
通过前面几篇文章的学习,我们知道了在Android系统中,无论是普通的Activity窗口,还是特殊的输入法窗口和壁纸窗口,它们都是被WindowManagerService服务组织在一个窗口堆栈中的,其中,Z轴位置较大的窗口排列在Z轴位置较小的窗口的上面。有了这个窗口堆栈之后,WindowManagerService服务就可以按照一定的规则计算每一个窗口的Z轴位置了,这个在之前的http原创 2016-12-27 10:20:43 · 3598 阅读 · 0 评论 -
Android6.0 WMS(六) WMS动画管理
Android的应用启动时,或者切换Activity时都会以动画的方式显示前后两屏的切换过程。动画的原理很简单,把一帧一帧的图像按一定时间间隔显示出来就完成了。动画的绘制需要定时驱动,通常的做法是启动一个定时消息,每隔一定时间发一个消息,收到消息后输出一帧画面。Android支持VSync信号后,动画的驱动就有VSync信号承担了。窗口动画的基本元素是窗口Surface中保存的图像,通过对原创 2016-12-23 15:09:40 · 5374 阅读 · 1 评论 -
Android6.0 WMS(五) WMS计算Activity窗口大小的过程分析(二)WMS的relayoutWindow
既上一篇博客,这篇我们分析WMS的relayoutWindow函数。relayoutWindow我们先看下relayoutWindow函数 public int relayoutWindow(Session session, IWindow client, int seq, WindowManager.LayoutParams attrs, int req原创 2016-12-21 16:41:57 · 6569 阅读 · 1 评论 -
Android6.0 旋转屏幕(五)WMS启动应用流程(屏幕方向相关)
一、强制设置方向1.Activity如果要强制设置一个Activity的横竖屏可以通过Manifest去设置,跟Activity相关的信息都会保存在ActivityInfo当中。android:screenOrientation=["unspecified" | "user" | "behind" | "原创 2016-12-20 15:27:55 · 3102 阅读 · 0 评论 -
Android6.0 旋转屏幕(四)应用强制设置方向
有时候我们也可以强制应用横频,这又是如何做到的?就是调用了AMS的setRequestedOrientation接口,这个接口先是调用WMS的setAppOrientation函数设置这个Activity在WMS中的方向。然后在调用WMS的updateOrientationFromAppTokens函数旋转屏幕,最后在调用updateConfigurationLocked这个函数之前博客分析过原创 2016-12-19 16:13:49 · 10470 阅读 · 0 评论 -
Android6.0 旋转屏幕(三)应用是否要重启
上篇博客我们分析了WMS中的updateRotationUnchecked函数,当旋转角度有变化时会调用sendNewConfiguration函数。这篇博客我们就来分析下这个函数。 public void updateRotationUnchecked(boolean alwaysSendConfiguration, boolean forceRelayout) {原创 2016-12-19 11:06:28 · 3520 阅读 · 3 评论 -
Android6.0 旋转屏幕(二)旋转设备
上篇博客中我们一直提到updateRotationUnchecked函数,这篇博客我们就来分析下这个函数,这个函数可以说是旋转屏幕的一个核心函数,我们主要看下updateRotationUncheckedLocked和sendNewConfiguration函数,当updateRotationUncheckedLocked返回true代表设备已经旋转,这个时候要调用sendNewConfigura原创 2016-12-16 11:13:31 · 7715 阅读 · 0 评论 -
Android6.0 旋转屏幕(一)WMS注册传感器回调
我们通常在手机上旋转屏幕可以应用主动旋转,也可以让应用随系统旋转。这里我们先分析应用随系统旋转的情况。设置选项(旋转屏幕)随系统选装的话,我们先要在手机设置中选择显示项,设备旋转时自动旋转。最终会调用RotationPolicy.setRotationLockForAccessibility函数,我们先来看下这个函数 public static void setRotat原创 2016-12-15 16:18:25 · 3754 阅读 · 1 评论 -
WMS常见问题一(Activity displayed延迟)
我们经常碰到问题比如状态栏是有的,但是Activity的界面是黑屏。而logcat中也有如下log:02-27 16:07:47.816929 2667 2733 I ActivityManager: Displayed com.android.settings/.SubSettings: +30s71ms这样的问题我们如何分析,这里我们从代码角度分析下。当然我们追查log的时候是查l原创 2017-03-03 11:31:55 · 4089 阅读 · 1 评论