安卓冻屏bug案例作业分享-千里马学员wms+input实战作业

WMS->stopFreezingScreen()冻屏总结 对于冻屏理解不深可能会认为冻屏会出现黑屏,不是这样的,恰恰相反,冻屏的目的就是防止执行默写操作的过程出现黑屏。冻屏的过程只是不接收输入和不执行动画,并且会截取屏幕进行显示。下面我们就来分下冻屏的过程。 WMS暴露了一个可以通过binder调用执行的冻屏操作,是startFreezingScreen函数 @Override public void startFreezing... 阅读详情

背景:

近期有学员反馈在aosp14高版本上有了一个新窗口TaskBar,这个但是有需求就是对这个TaskBar进行隐藏,所以有一个需要对这个TaskBar进行进行隐藏需求
在这里插入图片描述

隐藏TaskBar需求做了之后发现有如下bug:
冻屏问题复现图

问题复现步骤:

因为要实现一个对TaskBar隐藏需求功能,所以这里需要先实现这个需求,正因为实现这个需求后才发现可以复现这个冻屏问题。
普通模拟器需要看到TaskBar
这里普通的手机是无法看到TaskBar,需要进行相关density进行设置,变成平板设备才可以
一般aosp14_r15编译lunch sdk_phone_x86_64后起来后需要再执行一下命令才可以变成平板的显示模式。

adb shell wm density 240

执行后画面变成如下:
在这里插入图片描述

修改隐藏TaskBar
只需要TaskbarActivityContext中对mDragLayer进行隐藏,patch如下

test:~/disk2/aosp14/packages/apps/Launcher3$ git diff quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
index a1390aeabb..b3bf3dc283 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
@@ -17,6 +17,7 @@ package com.android.launcher3.taskbar;
 
 import static android.content.pm.PackageManager.FEATURE_PC;
 import static android.os.Trace.TRACE_TAG_APP;
+import static android.view.View.GONE;
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
@@ -294,6 +295,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
         } else {
             mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams);
         }
+       mDragLayer.setVisibility(GONE);
     }
 
     /**

问题复现步骤
1、设备切换成导航手势模式
2、打开一个短信应用
3、导航手势慢慢上滑一点点距离,然后松开手势不上滑,就可以复现冻屏问题

作业要求

整个作业要求完成以下几个部分,可以按照实现部分得分

1、要求分析出冻屏的原因是什么,为什么画面变得无法触摸

2、分析出来了冻屏原因,再考虑怎么屏蔽TaskBar就会用法该bug,为啥TaskBar存在就不会有该bug

3、给出修改方案,实现屏蔽TaskBar依旧不会产生冻屏问题

更多framework技术干货,请关注“千里马学框架”

RK3572-Android16-记录一次OTA升级失败解决方案 这里记录一次解决RK3576 Android16 OTA 用Recovery 升级失败的一次解决案例,将部分经验作为总结。本次OTA升级耗时了几天,最终是RK给出的解决方案,再加上经验来解决了其它部分问题新平台,高一点的Android版本,可能本身有bug,多请教平台来,不要蒙着干,干不出来的。 阅读详情

相关推荐

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 327

Android 11---WMS之横竖屏切换流程详解

本文以Activity.setRequestedOrientation为入口梳理下横竖屏切换的详细流程。     代码均是基于最新的11.0版本。  第一篇主要讲了横竖屏切换时的准备操作: 更新方向,执行冻屏,截图显示以及计算更新基于新的方向的DisplayInfo和Configuration。 第二篇主要讲下如何将更新后的Configuration通知到树形的窗口结构以及应用中。 第三篇主要讲下解冻的流程以及...

cczhengv 3599

深入剖析:NAND Flash与SD NAND(贴片式SD卡)存储扇区分配表架构差异与优化策略

本文深入探讨了NAND Flash与SD NAND(贴片式SD卡)在存储技术中的架构差异及其优化策略。NAND Flash作为非易失性存储器,依赖主控芯片进行坏块管理和磨损均衡,而SD NAND则通过内置控制器和标准文件系统(如FAT)简化了存储管理。两者在写入性能、容量扩展和可靠性方面各有优劣,NAND Flash需通过磨损均衡和写入合并优化性能,而SD NAND则通过高容量和高速传输提升效率。文章为嵌入式系统开发者和硬件工程师提供了关于如何根据需求选择并优化存储介质的参考。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1238

WMS/AMS 层级结构树学习

本文摘要: Android窗口管理系统(WMS)通过层级树结构管理窗口显示,核心机制包括:1) WindowToken作为窗口身份凭证,用于权限校验和分组管理;2) findAreaForToken方法确定窗口在层级树中的位置;3) mAreaForLayer数组实现快速层级映射;4) Policy规则定义不同类型窗口的层级分配。整个过程类比摩天大楼管理:新窗口需先获取Token"通行证",根据类型分配到指定"楼层",通过预置映射表快速定位显示位置。WindowTok

John_5256的博客 415

三极管特性曲线看不懂?手把手教你用Multisim仿真分析放大电路频率响应

本文针对模拟电路初学者,详细讲解如何利用Multisim软件进行电路仿真,将抽象的三极管特性曲线与放大电路频率响应分析变得直观可视。通过手把手教学,指导读者从导入三极管SPICE模型、仿真输出特性曲线,到分析动态工作点,最终使用波特图仪深入分析频率响应并进行补偿设计,有效帮助理解电路原理并指导实践调试。

weixin_29230059的博客 122

ZYNQ实战:手把手教你用AXI4-Full IP核打通PL与PS的DDR数据通道

本文提供了一份详细的ZYNQ实战指南,手把手教你创建并使用具备AXI4-Full Master接口的自定义IP核,实现PL(可编程逻辑)通过AXI HP接口直接读写PS(处理系统)的DDR内存。文章涵盖了从Vivado硬件设计、IP核配置、地址映射到Vitis软件验证的完整流程,并深入解析了数据一致性(禁用Cache)等关键要点,旨在帮助开发者掌握ZYNQ异构计算中高效数据搬运的核心技术。

weixin_29193359的博客 284

学员作业:高阶WMS显示相关疑难问题黑屏/部分黑问题案例

有了aosp可以复现的步骤,那么这个问题其实本质上就是aosp的原生问题,大家一旦修复那就是帮助google改了相关的重大bug哈,很多同学都对这类原生的疑难问题修改,非常感兴趣,当然啦这个难度肯定也是最大的,所以这里把这个疑难问题整理成学员作业,让广大vip学员们可以有更好的实战解决问题锻炼。针对自由窗口相关需求,学员们在学习了课程后,也经常使用会用于公司的实战开发项目。刚开始还以为这个自由窗口产生部分黑的问题和以前课程讲的一样,但是学员认真观看后反馈两个问题场景是完全不一样的。下面学员请教的详细情况。

learnframework的博客 376

绝缘检测是什么? 绝缘检测原理 绝缘检测检测的是什么?那个量?电压?电流?电阻?

绝缘电阻是电气设备和电气线路最基本的绝缘指标。对于低压电气装置的交接试验,常温下电动机、配电设备和配电线路的绝缘电阻不应低于0.5MΩ(对于运行中的设备和线路,绝缘电阻不应低于1MΩ/kV)。 绝缘电阻的正确测量方法 现代生活日新月异,人们一刻也离不开电。在用电过程中就存在着用电安全问题,在电器设备中,例如电机、电缆、家用电器等。 影响因素 环境温湿度 一般材料的绝缘电阻值随环境温湿度的升高而减小。相对而言,表面电阻(率)对环境湿度比较敏感,而体电阻(率)则对温度较为敏感。 湿度增加,表面泄漏增大,导体电导

dianqicyuyan的博客 2万+

TaskBar Navigation bar,在开机向导页面未显示的问题

摘要:开机向导页面存在导航按钮颜色与背景重叠问题,需调整按钮颜色显示。该问题位于NavbarButtonsViewController.java文件中,主要涉及不同模式下的导航栏按钮布局逻辑,包括正常模式、儿童模式和设置向导模式。在设置向导模式(isInSetup)下,代码会调用handleSetupUi()处理UI,但未明确设置按钮颜色,导致白色按钮与浅色背景重叠。建议在handleSetupUi()中明确设置导航按钮的颜色值,确保与背景形成足够对比度。

xu的博客 227

华为od统一考试B卷【单词搜索】C++ 实现

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

MISAYAONE的博客 710

LVGL core disp显示设计(lv_disp.c)

lv_disp.c当前显示页面的配置scr_act在原始的LVGL是以screen的概念存在,但我们还是习惯叫它为一个页面提供获取top_layer、sys_layer、prev_scr图层接口配置主题管理默认的主题管理是递归查找的,实际项目中因此页面的复杂性,虽然也兼容了此主题管理的方案,但还是推荐使用单页面自行管理主题的方案壁纸设置多页面切换的动画支持计算无用户操作时间清理显示缓存。

Bigan(安)的博客 2331

app开发转framework系统工程师窗口显示方向面试真题

2、framework的承担开发要求精,因为framework毕竟属于系统层面东西,一修改影响整个系统的功能和稳定,分析代码理解代码精通代码才可能可以修改掉系统一些问题,及最小波及的实现系统的一下新功能,不是网络百度复制粘贴一下即可以,所以这里要求是对简历上写出的精通或熟悉模块,面试官会挖的比较深入,会对模块很多重要部分进行提问考察,这个部分就是对你真正是否熟悉这个模块的考察,也是区别你是真懂的实战派还是说看了看blog和记忆性的背书党关键。13、你接过input相关的外设吗,或者说一下input的流程?

learnframework的博客 513

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

投屏音视频基础知识-千里马安卓framework手把手带你做投屏

所以每一张图像的裸数据都是很大的。国际上主流制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准 有 H.261、H.263、H.263+、H.264 等,另一个是“国际标准化组织(ISO)”它制定的标准有 MPEG-1、MPEG-2、 MPEG-4 等。采集解决了数据从哪里来的问题,渲染解决的是数据怎么崭新的问题,处理解决的是数据怎么加工的问题,传输解决的是数据怎么共享的问题。描述一段 PCM 数据需要几个量化指标,常用的量化指标是采样率,位深度,字节序,声道数。

learnframework的博客 1059

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

安卓Framework wms/ams实战作业布置-千里马学框架

2、如果当前应用在后台(注意一定要在后台,不能在前台),使用adb shell 命令进行kill进程发现只有应用的WindowState在结构树被移除,其他的ActivityRecord,Task就没有被移除。哈哈,确实平时没注意这个现象,看到他描述的这个结果有点意外,主要不影响上面运行,属于安卓自己设计机制,所以与我们想象的一旦进程都被杀了,那么层级结构树肯定不可以残留相关的Task和ActivityRecord。

learnframework的博客 1512

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

WMS实战之解决小米等国内桌面被强制横屏布局乱问题

所以就不得不跟着横屏显示。国内手机桌面基本不支持横屏,都是强制竖屏模式,所以对横屏基本没有适配对应的布局,所其实这些桌面是不希望看到有横屏情况展示出来,但是经常又会又一些小场景会导致桌面被强制横屏,所以看起来的体验比较差,就经常容易让测试提bug,用户体验也很糟糕。2、桌面支持横屏显示,这个理论是可以的,但是也不太现实,因为桌面横屏修改等需要波及面还是比较多的,很多都是业务类工作,工作量较大,而且也只是为了修改一个这个体验性bug,性价比低。那下面千里马就带大家开干,,把这个显示异常bug修复了。

learnframework的博客 3097

千里马带你学framework:android 13 WM_SHELL_STARTING_WINDOW相关记录笔记

这里是为啥阿,因为高版本StartingWindow已经移殖到了Systemui进程,让Systemui来负责窗口创建相关,所以自然就wms端处理不了,要跨进程让systemui处理。这里注意,明显用wm开启时候,和正常wm相关的打印输出也是不一样的,明显显示是No IProtoLogGroup named WM_SHELL_STARTING_WINDOW。这个时候logcat -s WindowManager是没有这个shell相关打印,必须要。才可以打印出相关的Proto日志。

learnframework的博客 2307

Android 开发入门实践(二):Kotlin 空安全,从可空类型到安全访问

延续 NewsApp 项目中的新闻标题练习,记录 Kotlin 安全调用。

Easyhood的博客 288

Android 模块化收口:能力组合框架、手写 LifecycleOwner 与热修复共存

二十多个模块业务高度相似却各有差异,核心矛盾在于“统一与灵活”的平衡。通过角色接口组合(如IProjectAware、IVoiceAware)实现能力按需注入,新增功能零侵入;用模板方法锁定生命周期流程,确保顺序一致;结合@CallSuper与工厂方法,既约束关键逻辑,又保留子类自由。最终实现:骨架统一、填空自由,管得住业务,又不侵入业务。

mmsx990的博客 397

Android 开发入门实践(十三):用 Intent、UiState 和 Reducer 理解 MVI 的状态更新

本文记录第141—145课对MVI架构的入门实践,通过“返回列表”功能逐步构建意图(NewsIntent)、状态(NewsUiState)与状态转换(reduce)机制。基于单向数据流,用户操作生成意图,ViewModel通过Reducer根据旧状态计算新状态,并通过StateFlow更新Compose界面。代码实现清晰分离关注点,强化了对状态管理、事件驱动与数据流的理解。

Easyhood的博客 324

Android Message源码阅读

本文梳理了Android Handler机制中Message的核心设计:链表结构、消息复用池(sPool)及回收机制,重点解析了异步消息与同步屏障(SyncBarrier)的协同机制。当主线程需优先处理UI绘制等高优先级任务时,系统通过postSyncBarrier插入屏障,使Looper跳过普通同步消息,优先执行标记为异步的UI渲染任务,确保帧率流畅。该机制是保障Android界面响应性的关键技术之一。

u012116089的博客 201

安卓部署Linux性能实测:一颗移动处理器,能否胜任日常 Linux 开发?

本文通过在一加Ace5上部署NimoteCode的ARM64 Linux环境,测试了其在CoreMark、SQLite编译及并行构建中的表现。结果显示,尽管单核性能约2.34GHz,多核扩展比达6.15×,但优化编译耗时仍高达35秒,反映移动处理器虽具备一定开发能力,却受限于文件系统开销与运行环境(如PRoot)。实际开发中,非优化构建效率较高,而并行编译可显著提速。结论:安卓手机可作为轻量级开发辅助工具,但无法替代桌面环境,真正价值在于便携性与即时响应,而非全功能替代。

一个不知名码农的专栏 322

Android 17 全栈性能分析关键字与源码手册

FrameTimeline 找异常帧,ATrace 找阶段,thread_state 找等待类型,ftrace 找内核原因,Simpleperf 找 CPU 热点,驱动源码找最终触发条件;任何根因结论都必须回到同一对象、同一时间窗口和同一条依赖链。

weixin_43228946的博客 371

CTF 命令执行题学习笔记:终端特殊字符 $IFS 与 %09 的用法(HelloCTF RCE-labs)

空格被过滤时:用%09(TAB)或$IFS代替空格关键词被过滤时:用通配符?或字符类[f]拼出被禁的词,让 WAF 在原始字符串里看不到它,shell 在执行时再展开这类技巧在后续的命令执行题里会反复用到,建议亲手在靶机上敲一遍感受一下。

YY888888_的博客 542

Android 开发入门实践(九):把新闻数据与页面状态交给 ViewModel

本文记录第110—117课学习成果:将页面标题、新闻列表及选中编号逐步迁移至NewsViewModel,通过ViewModelProvider获取实例并读取数据。页面调用ViewModel方法处理选择与返回,实现状态管理解耦。过程中纠正了对Activity重建机制的误解,并厘清mutableStateOf的可观察性与ViewModel对象生命周期的区别,深化了对Compose状态更新机制的理解。

Easyhood的博客 220
上一篇: 安卓系统属性persist类型prop深入剖析
下一篇: 安卓疑难问题冻屏/黑屏深入剖析原因-全网独家framework实战
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值