- 博客(15)
- 资源 (7)
- 收藏
- 关注
原创 Android6.0 WMS(七) 窗口Z轴位置
通过前面几篇文章的学习,我们知道了在Android系统中,无论是普通的Activity窗口,还是特殊的输入法窗口和壁纸窗口,它们都是被WindowManagerService服务组织在一个窗口堆栈中的,其中,Z轴位置较大的窗口排列在Z轴位置较小的窗口的上面。有了这个窗口堆栈之后,WindowManagerService服务就可以按照一定的规则计算每一个窗口的Z轴位置了,这个在之前的http
2016-12-27 10:20:43 3541
原创 Android6.0 WMS(六) WMS动画管理
Android的应用启动时,或者切换Activity时都会以动画的方式显示前后两屏的切换过程。动画的原理很简单,把一帧一帧的图像按一定时间间隔显示出来就完成了。动画的绘制需要定时驱动,通常的做法是启动一个定时消息,每隔一定时间发一个消息,收到消息后输出一帧画面。Android支持VSync信号后,动画的驱动就有VSync信号承担了。窗口动画的基本元素是窗口Surface中保存的图像,通过对
2016-12-23 15:09:40 5291 1
原创 Andrdoid6.0 DisplayManagerService
之前在分析power模块的时候,需要设置背光那个时候分析过DisplayManagerService,但是不够详细、系统。前面在分析WMS旋转屏幕的时候,也涉及到了DisplayManagerService,所以我准备详细分析下。一、缺省设备我们先看DisplayManagerService在SystemServer中调用的顺序。先是构造了对象,然后调用了windowManagerAndI
2016-12-22 16:44:24 4001
原创 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 6448 1
原创 Android start stop命令
我们经常使用stop start命令来重启framework,我们来看下其代码是在system/core/toolbox下面,原理很简单就是利用ctl属性来控制进程。start.c#include #include #include #include int start_main(int argc, char *argv[]){ if(argc > 1) {
2016-12-20 15:43:37 4416
原创 Android6.0 旋转屏幕(五)WMS启动应用流程(屏幕方向相关)
一、强制设置方向1.Activity如果要强制设置一个Activity的横竖屏可以通过Manifest去设置,跟Activity相关的信息都会保存在ActivityInfo当中。android:screenOrientation=["unspecified" | "user" | "behind" | "
2016-12-20 15:27:55 3029
原创 Android6.0 旋转屏幕(四)应用强制设置方向
有时候我们也可以强制应用横频,这又是如何做到的?就是调用了AMS的setRequestedOrientation接口,这个接口先是调用WMS的setAppOrientation函数设置这个Activity在WMS中的方向。然后在调用WMS的updateOrientationFromAppTokens函数旋转屏幕,最后在调用updateConfigurationLocked这个函数之前博客分析过
2016-12-19 16:13:49 10339
原创 Android6.0 旋转屏幕(三)应用是否要重启
上篇博客我们分析了WMS中的updateRotationUnchecked函数,当旋转角度有变化时会调用sendNewConfiguration函数。这篇博客我们就来分析下这个函数。 public void updateRotationUnchecked(boolean alwaysSendConfiguration, boolean forceRelayout) {
2016-12-19 11:06:28 3451 3
原创 Android6.0 旋转屏幕(二)旋转设备
上篇博客中我们一直提到updateRotationUnchecked函数,这篇博客我们就来分析下这个函数,这个函数可以说是旋转屏幕的一个核心函数,我们主要看下updateRotationUncheckedLocked和sendNewConfiguration函数,当updateRotationUncheckedLocked返回true代表设备已经旋转,这个时候要调用sendNewConfigura
2016-12-16 11:13:31 7577
原创 Android6.0 旋转屏幕(一)WMS注册传感器回调
我们通常在手机上旋转屏幕可以应用主动旋转,也可以让应用随系统旋转。这里我们先分析应用随系统旋转的情况。设置选项(旋转屏幕)随系统选装的话,我们先要在手机设置中选择显示项,设备旋转时自动旋转。最终会调用RotationPolicy.setRotationLockForAccessibility函数,我们先来看下这个函数 public static void setRotat
2016-12-15 16:18:25 3661 1
原创 应用禁止屏幕旋转
应用设置全屏在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.La
2016-12-15 13:56:32 4624
原创 Android6.0 WMS(四) WMS中常用变量分析
这篇博客我们分析WMS的一些常用变量,我们依然从主线addWindow开始分析,碰到一些常用的变量再进行分析。DisplayContent我们再来看如下DisplayContent 类 final DisplayContent displayContent = getDisplayContentLocked(displayId);我们再来看getDis
2016-12-13 18:10:08 2110
原创 Android6.0 WMS(三) WMS窗口次序
这篇博客我们主要分析下,窗口位置排序的一些原理。一、添加窗口的时候 调整窗口位置上篇博客我们分析了WMS的addWindow函数,这里我们就窗口的次序问题继续分析。 boolean imMayMove = true; if (type == TYPE_INPUT_METHOD) {//如果窗口类是输入法窗口
2016-12-08 18:56:14 3071 1
原创 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 4092
原创 user版本不能使用adb问题
最近碰到一个问题user版本不能使用adb问题。这个问题涉及到adbd和Usb相关的service代码。一、adbd我们先看看adbd对user版本的代码:首先在adb_main函数中有如下代码,当ro.adb.secure属性为0的时候auth_required 变量为false。这个时候一般是debug版本(不会设置这个属性或者这个属性为0) if (ALLOW_
2016-12-07 11:11:54 7482 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人