- 博客(51)
- 收藏
- 关注
原创 Android U 分屏——SystemUI侧处理
分屏是由上分屏(SideStage)、下分屏(MainStage)以及分割线组成。这里我们主要关注分屏的Stage部分,如下图所示:我们这里上分屏是电话,下分屏是短信。通过命令可以看层级结构,这里我们看看上下分屏指的是什么这里Task=331其实就是分屏的RootTask,通过(在system_server进程中)设置的,使其显示到最前面。其下面挂着和,这段代码也就是为了,即下面挂着下面挂着注:在android T(13) 中,上分屏为MainStage,下分屏为SideStage。
2025-03-04 10:16:42
730
原创 Android U system_server侧WindowContainerTransaction处理
前文分屏中说到Transitions的startTransition方法中,通过`mOrganizer.startNewTransition(type,wct);`提交WindowContainerTransaction相关事务到system_server侧,这里以此流程为例,讲解WindowOrganizerController是如何处理WindowContainerTransaction的。WindowContainerTransaction的发送都是通过WindowOrganizer的相关方法
2024-12-24 15:35:21
646
原创 Android U 多任务启动分屏——SystemUI流程
前文说到通过接口跨进程调用到了SystemUI进程,我们继续分析分屏在systemui中的实现,这些实现都是在WMShell中实现的。
2024-11-18 16:08:43
1190
原创 Android T 远程动画显示流程其三——桌面侧动画启动到系统侧结束流程
接着前文分析我们通过IRemoteAnimationRunner跨进程通信从系统进程来到了桌面进程,这里是真正动画播放的逻辑。之后又通过IRemoteAnimationFinishedCallback跨进程通信回到系统进程,处理动画结束时的逻辑。
2024-02-27 15:21:08
2244
原创 Android T 远程动画显示流程其一——整体流程以及堆栈介绍
序本地动画和远程动画区别是什么?本地动画:自给自足。对自身SurfaceControl矢量动画进行控制。远程动画:拿来吧你!一个app A对另一个app B通过binder跨进程通信,控制app B的SurfaceControl矢量动画。无论是本地动画还是远程动画,都仅仅只是对SurfaceControl动画图层控制,而无法控制应用内部的View。注:矢量动画包含位移、放大、缩小、透明度、圆角等。常见的远程动画,就是我们从桌面点击一个应用启动这个应用,这个过程中会产生的动画就是远程动画。我们从
2024-01-29 18:52:34
3177
原创 android 常规log、dump、winscope常见抓取方法
则对应的代码可以通过 grep 抓取 writeWmxxx 找出是在哪里打印的该events log。events log开头的字段,比如wm_xxx。应用走到onresume生命周期的log。通知cancel的log。
2024-01-17 15:16:45
1758
原创 Android Framework中的addView和addWindow
addView方法是用于将视图添加到布局中的方法,通常用于在应用程序级别的布局中动态添加视图。addWindow方法是用于将窗口添加到窗口管理器中的方法,通常用于创建系统级别的窗口,例如:悬浮窗、对话框、Toast提示等。
2023-11-15 17:59:14
1077
原创 Android T 窗口动画(本地动画)显示流程
如何创建一个窗口动画?我们通过先从APP创建一个窗口,以这个窗口的创建过程的窗口动画为例这个demo就是点击BUTTON显示窗口,点击CLOSE WINDOW关闭窗口
2023-11-08 15:43:17
3820
4
原创 Android T 禁止应用添加窗口的操作
什么情况下会出现我们需要禁止应用添加窗口的情况呢?假如有一个应用的窗口,我们点开后是透明的或者会影响到系统的使用,那么我们就有必要对这个窗口操作一下回顾我们在中所讲的内容禁止应用添加窗口的操作有两种1.直接在客户端对应用禁止添加窗口2.在服务端禁止应用添加窗口。
2023-09-21 16:20:22
506
原创 Android T 窗口层级其三 —— 层级结构树添加窗口
DisplayArea层级结构中的每一个DisplayArea,都包含着一个层级值范围,这个层级值范围表明了这个DisplayArea可以容纳哪些类型的窗口。每种窗口类型,都可以通过WindowManagerPolicy.getWindowLayerFromTypeLw方法,返回一个相应的层级值。尚未添加窗口的层级结构树,如图。这里我们根据上面的代码,以及。的信息简单画出如下树形图。
2023-09-06 20:47:49
2517
2
原创 Android T 窗口层级其二 —— 层级结构树的构建
如何通过dump中的内容找到对应的代码?我们dump窗口层级发现会有很多信息,这里我们以其中的DefaultTaskDisplayArea为例在源码的framework目录下查找该字符串,找到对应的代码就可以通过打印堆栈或者搜索代码跟踪的方式找到其调用逻辑也就是这一句当然我们上篇文章也讲到了DisplayContent代表的屏幕的DisplayArea层级结构的根节点,我们可以直接从DisplayContent.java的构造方法出发,追踪其流程。
2023-08-10 20:25:03
2701
7
原创 Android T 窗口层级其一 —— 容器类
窗口在App端是以PhoneWindow的形式存在,承载了一个Activity的View层级结构。这里我们探讨一下WMS端窗口的形式。
2023-08-08 21:39:32
2752
原创 Android Notification的使用
常用通知的写法,兼容android 8.0之后的版本。在AndroidManifest.xml中添加权限。
2023-07-31 13:59:06
717
原创 android 窗口焦点介绍
我们经常会遇到一种的ANR异常,这种异常一般是没有焦点窗口FocusedWindow导致,且这类异常只会发生在,因为是需要找到一个然后再派发,而只需要找到即可。
2023-05-18 17:27:06
8824
11
原创 Android 常见dumpsys方法与黑屏问题分析处理总结
黑屏问题是显示相关的综合性问题,涉及Android应用层、框架层和底层SurfaceFlinger、屏显等多个领域。下面有一些基础的判断来定位黑屏问题的归属:(1) 屏幕没有亮屏、背光为0则需先从power、屏显角度分析(2) 屏幕黑屏,但可以进行三指截屏、power键+音量下键截屏,并且截图正常显示(非黑图),则需先从屏显角度分析(3) 视频类、相机类显示黑屏,需要先确认编解码、阅览显示问题(4) 应用界面局部性黑块,某个控件黑,确认应用的view问题。
2023-05-07 17:26:33
12032
28
原创 Android T Activity启动流程(更新中)
Activity:应用的某个activity入口ActivityManagerService:统筹管理着android的四大组件;统一调度各应用进程ActivityTaskManagerService:Android R新引入,专门用来管理Activity的启动,调度等功能ActivityStarter:专门用于处理activity新启动ActivityStartController:基于工厂设计模式,ActivityStarter的应用启动器。
2023-05-06 00:02:08
988
原创 Android T 窗口点击过滤功能实现
有些应用可能会存在透明窗口,或者界面异常导致当前页面无法触发点击事件,如果要从input侧解决该问题,如何处理?
2023-05-05 14:17:01
695
原创 android input命令模拟事件以及事件注入实现
在坐标(500,100)的位置模拟点击事件参数解析:int inputSource:表示模拟事件的类型float x, float y:表示事件坐标点int displayId:在哪个屏幕上触发事件(一般用于多屏)
2023-05-04 22:32:07
1869
2
原创 InputReader流程梳理
对于设备事件,此函数对根据设备的可用性加载或移除设备对应的配置信息。对于原始输入事件,则在进行转译、封装与加工后将结果存储到mQueuedListener中。,这里主要创建InputDevice设备,并根据class给device添加了各种能够支持的Mapper。最后添加到mDevices的Vector容器中。所有事件处理完毕后,调用mQueuedListener.flush()将所有暂存的输入事件一次性地交付给InputDispatcher。方法开始加工数据,否则添加、删除或配置设备,这里以添加为例。
2023-05-03 01:28:29
324
原创 Android T wallpaper相关流程
什么是壁纸?壁纸即是一个壁纸服务,每换一张壁纸 ,就是将该图片写入壁纸文件,再启动一个壁纸服务读取该壁纸文件显示出来的过程。
2023-05-01 00:07:45
2171
2
原创 Android 窗口常见参数汇总
Window类中有一个WindowManager.LayoutParams类型的属性mWindowAttributes记录了当前窗口的相关参数
2023-04-29 18:42:32
4115
原创 Android T WMS窗口相关流程
什么是窗口窗口即是屏幕上的一块用于绘制各种UI元素并可以响应用户输入的一个矩形区域。从原理上讲,窗口的概念是独自占有一个Surface实例的显示区域(我们在屏幕上看到的图形都需要绘制在Surface上)。Window是个抽象类其实现类为PhoneWindow。
2023-04-24 23:44:34
8910
28
原创 Android T TaskSnapshot创建和移除流程
添加新的snapshot时,将旧的ActivityRecord移除,CacheEntry会直接被新的覆盖。taskSnapshot的创建流程中,最后一次可见的ActivityRecord与taskId建立映射,所以当且仅当之前建立映射的ActivityRecord被移除时,才会移除缓存。启动应用时prepare过渡动画,应用完成onresume时,execute过渡动画,所以此时可以handle过渡动画。应用的切换场会填充过度动画,task的快照流程的起点被设计在过渡动画的起点。
2023-04-21 00:16:02
3254
原创 Android动态权限获取及其工具类的实现与整合
Android6.0以上,即API 23以上动态权限获取,这里以录音权限为例,其他权限亦可这样动态获取。
2020-01-12 13:52:42
1414
2
原创 Java Web中的Cookie和session
会话技术1. 会话:一次会话中包含多次请求和响应。 * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止2. 功能:在一次会话的范围内的多次请求间,共享数据3. 方式: 1. 客户端会话技术:Cookie 2. 服务器端会话技术:SessionCookie1. 概念客户端会话技术,将数据保存到客户端2. 快速入门 *...
2019-11-12 09:04:12
320
原创 MySQL操作汇总
目录一.DDL:操作数据库、表1. 操作数据库:CRUD2.操作表:CRUD二、DML:增删改表中数据1. 添加数据2. 删除数据3. 修改数据三、DQL:查询表中的记录1.语法2. 基础查询3. 条件查询附录:练习例子一.DDL:操作数据库、表1. 操作数据库:CRUD* C(Create):创建--创建数据库:create d...
2019-11-11 12:00:44
270
原创 Vue.js学习与入门(九)Vuex状态管理
为了能让其他组件共享这些数据和方法,可以通过Vuex来统一管理组件状态。首先需要安卓Vuex,在命令端口中,切换到你的Vue项目的路径,然后输入以下命令进行安装。 npm install --save vuex在src目录下,新建一个store目录,并在这个目录下创建一个store.js文件,示例文件内容如下:import Vue from 'vue'import Vu...
2019-11-05 09:11:22
283
一个简易的桌面app应用
2024-05-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人