aosp14/15官方Freeform工具栏CaptionWindow显示不同步bug修复方案总结

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

背景:

在自由窗口选中右下角频繁进行相关拖拽放大缩小自由窗口,会出现CaptionWindow工具栏和自由窗口Activity宽度不同步问题。
频繁拖动后显示异常 问题单独一帧看也可以看到工具栏显示宽度宽,Activity显示宽度窄
在这里插入图片描述
今天来讲解一下相关的修复方案讨论。

问题修复后的成果及总结:

成果展示:
在这里插入图片描述
明显上图可以看出在拖动自由窗口过程中,已经没有出现工具栏和Activity显示宽度不一致的问题了。

问题本质原因修复方案总结:

核心问题就在于CaptionWindow在systemui中进行刷新,而Activity是在应用进程单独刷新,在拖动时候会不断修改Activity和CaptionWindow相关的bounds大小,但是二者又处于两个进程单独刷新,导致没有掌握好刷新节奏,这类问题在分屏课程,ShellTransition课程中其实也是有详细讲解的。所以根据课程所学知识大家应该知道修改方案的核心就是让CaptionWindow的刷新和Activity的刷新要进行同步事物管理既可以。

(具体的实战修改patch目前只对高级八件套及以上vip开放,具体获取方式私聊马哥)

修改画面同步后副作用:

触摸拖动自由窗口的跟手性变差
因为CaptionWindow刷新需要进行等待Activity完全刷新完成才可以进行一起刷新,所以必然会导致刷新的跟手程度不好。

总结:
这个bug感觉Google不予修复也是无奈源头方案定错了,虽然把这个问题修复了,就和现象一样跟手性不好了,所以还是建议用分屏自由课程方案来做自由窗口呗,彻底抛弃Google自动的自由窗口变化交互

其他非正面修复方案:

因为上面的正面修复会带来跟手性问题,那么是否可以考虑修改相关的交互方案来规避该bug呢?
也就是不考虑正面修复bug,而是考虑使用修改交互方式来规避该bug方式,其实在公司的实战开发中这种通过修改交互方式来规避bug还比较常见,一般面对以下几种情况时候就会考虑交互上来规避:

1、正面修复bug难度太大,耗费时间太多,时间投入性价比低

2、正面修复bug波及太多,会引发很多副作用

3、交互修改更可以优化用户体验

那么针对自由窗口CaptionWindow和Activity刷新不同步问题用什么交互方式来改善呢?

方案1(难度大,修改多体验好):
改善成和国内主流手机厂商一样的方案,针对自由窗口的放大采用等比例缩放方案,这这个方案马哥课程已经有详细实战讲解,当然难度也比较大
在这里插入图片描述

方案2(最简单,修复快,需要产品同意):
这个是学员在vip群中提出的一个规避方案
在这里插入图片描述

采用在拖拽放大自由窗口时候显示一个ICON的图层,类似拖动分屏时候分屏显示的ICON图层方案

在这里插入图片描述
拖动自由窗口时候显示ICON图层,这样就可以只看到ICON图层,看不到下面的Freeform窗口相关
在这里插入图片描述
更多framework实战干货,请关注下面“千里马学框架”

HFSS实战:手把手教你设计微带发夹线滤波器(附完整参数计算流程) 本文详细介绍了使用HFSS设计微带发夹线滤波器的完整流程,包括参数计算、HFSS建模和优化策略。通过实战案例,帮助读者掌握微波滤波器设计的核心技巧,特别是奇偶模阻抗计算和HFSS仿真中的关键设置,适用于通信系统设计和射频工程应用。 阅读详情

相关推荐

Linux环境下OpenSSH升级到 OpenSSH_9.8p1(内置保姆级教程并包含openssl升级过程)

2024年7月1日接到安全部门同事邮件通知,目前生产环境及测试环境服务器Openssh存在远程代码执行漏洞(CVE-2024-6387),漏洞等级高,且攻击者可以成功利用该漏洞获得远程root shell最高权限从而执行任意代码及命令,主要受影响版本为8.5p1

菜鸟运维升级之路 2万+

手机大厂的自由窗口freeform功能基于aosp14/安卓14适配完成-千里马android framework实战开发

近期有个马哥学员刚好求助马哥一个关于以前马哥课程里面自由窗口项目,这个项目在android 13上做的,但是他们公司是aosp14,希望我能帮忙尽快升级到14。今年2023年已经块过去了,各个手机厂商已经开始适配aosp14,甚至有的是已经适配完成,明年市场就大部分手机出厂就都是android 14了。马哥课程中自由窗口效果可以看出来基本和国内手机各个大厂自由窗口效果是不是大体相同,课程实现是带大家手把手进行实现的。1、把原来的自由窗口自己的顶部栏显示等,独立成了一个窗口,移植到了如下目录。

learnframework的博客 2740

PX4 Gazebo仿真进阶:自定义飞机模型和地图的完整指南

本文详细介绍了如何在PX4 Gazebo仿真中自定义飞机模型和地图模型,包括文件架构解析、参数调整指南、地图定制技巧及常见问题解决方案。通过实战步骤和性能优化建议,帮助开发者高效完成复杂场景的飞行控制算法测试。

weixin_29081101的博客 386

Android12 wm size后动画位置异常问题解决

这个问题是当初有个客户需求发现的,这个需求是他们的产品屏幕上下经过对称裁剪,正常的情况是出现了界面异常,只有部分显示。客户希望我们这边能适配一下这种特殊的屏。 本来这个问题是想在驱动层和hwc去做的,但相关模块的同事认为这边改动工作量比较大,想让系统的人从上层实现一下功能。 因此考虑使用wm size强制将系qq统的分辨率改成适配显示屏的大小,以达到功能的需求。 ...

zcyxiaxi的博客 3090

【mip-NeRF】使用一组二维图像渲染3D场景视频(mip-NeRF论文复现)

本文对mip-NeRF模型的pytorch实现进行了复现

Ryan2k的博客 1845

深入解析report_timing:从基础参数到高级时序路径分析技巧

本文深入解析了静态时序分析(STA)中`report_timing`命令的核心用法与高级技巧。作为芯片设计的关键诊断工具,它能根据SDC约束精准定位时序路径问题。文章从基础参数过滤讲起,详细介绍了如何通过`-from`、`-through`、`-to`等选项定位关键路径,并深入讲解了`-input_pins`、`-nets`、`-transition_time`等高级选项如何揭示延迟细节,以及`-nworst`、`-slack_lesser_than`等过滤排序技巧,旨在帮助工程师高效解读时序报告,优化设计

h6i7j8的博客 1108

重学安卓14/15自由窗口freeform企业实战bug-学员作业

摘要 在AOSP14/15版本中,自由窗口工具栏由SystemUI的WMShell统一管理。学员反馈在频繁拖拽缩放自由窗口时,出现工具栏宽度与Activity窗口不同步的错位问题。通过复现步骤分析发现,该问题在快速拖拽操作时尤为明显。本文提供bug复现视频和问题帧截图,要求学员结合Freeform、Winscope和ShellTransition相关知识,分析问题原因并给出解决方案。该案例可作为AOSP14/15自由窗口实战练习素材。

liaosongmao1的专栏 180

STM32F4+FreeRTOS实战:手把手教你移植LWIP2.1.2(含LAN8720配置避坑指南)

本文提供了一份详尽的实战指南,手把手教你如何在STM32F4平台结合FreeRTOS实时操作系统,成功移植轻量级TCP/IP协议栈LWIP 2.1.2。文章重点剖析了硬件驱动层LAN8720 PHY芯片的配置要点与常见“坑点”,并深入讲解了LWIP与FreeRTOS的深度整合、关键配置及稳定性优化策略,旨在帮助开发者构建稳定可靠的产品级嵌入式网络功能。

ik678901234的博客 1063

安卓aosp14上自由窗口划线边框Freeform Caption实战开发-千里马framework实战

因为Caption是属于单独的图层,和Activity的图层都不在一个,而且Caption图层是显示在Activity图层的顶部,而DecorView等明显是Activity图层的一个View,边框红线自然就被Caption栏给遮挡了。即新建一个划线图层处于Caption图层的上面,这样划线图层就可以在自由窗口最顶部进行显示,不会被遮盖,具体实现其实就可以同样参考Caption实现 ,搞一个Windowless的窗口进行绘制。即自由窗口在被触摸放大缩小时候,边框要被画成红色的线条,表示选中。

learnframework的博客 1495

SquareLine Studio汉化版安装激活全攻略:LVGL嵌入式UI设计从入门到出代码

嵌入式GUI开发中,LVGL作为轻量级开源图形库,广泛应用于STM32、ESP32等MCU平台。可视化设计器通过拖拽生成LVGL代码,大幅提升UI开发效率。SquareLine Studio正是这类工具的代表,支持界面设计、事件绑定与代码导出。其安装、汉化与激活是初学者常见门槛,尤其涉及LVGL版本匹配、字体配置及FreeRTOS移植等关键环节。本文围绕汉化版安装、一个月免费激活码使用及最小可用流程展开,帮助开发者快速上手LVGL界面设计,规避常见环境与集成问题。

weixin_29189987的博客 421

【华为OD机试真题】45、 分糖果 | 机试真题+思路参考+代码解析(C++、Java、Py、JS)

### 🎃题目描述 >小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。 >  当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。 >  小明最少需要多少次(取出、放回和平均分配均记一次),能将手中糖果分至只剩一颗。

正在更新最新华为OD机试2025B卷,提供OJ在线刷题 1290

基于Android T代码分析: 在freeform窗口的标题栏拖动时移动窗口流程和拖动freeform窗口边沿改变大小流程

基于Android T代码分析: 在freeform窗口的标题栏拖动时移动窗口流程和拖动freeform窗口边沿改变大小流程

月山知了的博客 3741

58子站安居,经纪人营销管理平台登录接口加密逆向

实战场景password 实战分析 本次要解决的站点依旧来源自78技术人社群,有朋友希望再次说明一下其登录模块的加密参数寻找与逆向逻辑,本文我们就一起分析一下。 站点地址为:vip.anjuke.com/portal/login 通过开发者工具,可以简简单单的寻找到相应的数据。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 2万+

wms窗口/多窗口/自由窗口systemui侧边栏手势退出实战-学员作业

简单说就是学员朋友反应自由窗口置顶后,发现无法通过systemui的侧边栏返回手势进行返回了。课程时候,有一个需求就是实现自由窗口置顶的功能,这个需求实现后,自由窗口就会一直处于顶端,不会因为打开其他Activity导致自由窗口退出。明显看到焦点输入在自由窗口上,但是操作侧边栏依然是底部的联系人窗口退出的,自由窗口的联系人无法退出。2、设置自由窗口为置顶模式,让自由窗口处于顶部,具体方法可以看马哥分屏课程自由窗口最后一节。可以看到要实现的目标就是侧边栏滑动后退出是有焦点顶部自由窗口Activity。

learnframework的博客 654

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

自定义View绘制准备-DecorView创建

DecorView源码解析

H_xxxxd的博客 670

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android 8.1 FreeForm切换显示异常

平台 RK3399 + Android 8.1 调试应用: com.android.documentsui 问题 切换后显示异常, 如下图所示, 窗口明显被拉伸了: 正确的显示效果: 调试 dumpsys window 显示异常 Window #5 Window{82f86c3 u0 com.android.documentsui/com.android.documentsui.files.FilesActivity}: mDisplayId=0 stackId=2 mSession

ansondroider的博客 1719

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

Easyhood的博客 289

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)。实际开发中,非优化构建效率较高,而并行编译可显著提速。结论:安卓手机可作为轻量级开发辅助工具,但无法替代桌面环境,真正价值在于便携性与即时响应,而非全功能替代。

一个不知名码农的专栏 323

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

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

weixin_43228946的博客 372

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

云手机私有化部署完整方案:基于ARM服务器搭建私有安卓云集群

ARM 服务器是私有化安卓云集群最优硬件底座,原生架构匹配 Android,高密度、低损耗,非常适合企业内网场景。整套私有化方案的核心,从来不是 “跑起来安卓”,而是隔离可控、可审计、可运维、可扩容。两条路线各有取舍:开源自建灵活、门槛高;商用私有化交付开箱即用、安全能力完备,是当前企业生产环境主流方案。六边云手机私有化方案,补齐了自建方案在驱动适配、管控平台、审计合规、信创适配上的短板,适合对数据主权、内网隔离有强需求的政企、自研 App、垂直行业客户。

a598652的博客 333

Android 顶点上传:Heap 到 Direct 的零拷贝,省的是 JNI 次数

一帧数十万次putFloat的性能瓶颈源于频繁跨JNI边界,每次开销远超传输字节数。通过将写入与上传解耦:用堆内ByteBuffer高速写入,最后一次性put(writeBuf)批量传至堆外DirectByteBuffer,将数百万次边界调用压缩为一次,实现近10倍性能提升。关键在于复用堆外缓冲区、统一端序,并结合“更新-绘制”分离,仅在数据变更时上传顶点,平移缩放时零开销重绘,彻底释放CPU瓶颈。

mmsx990的博客 478
上一篇: 重学安卓14/15自由窗口freeform企业实战bug-学员作业
下一篇: 面试福利:安卓系统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、付费专栏及课程。

余额充值