android framework分屏“官方”黑屏bug问题发现,你会分析吗?-千里马实战作业挑战

本文主要是介绍android framework分屏“官方”黑屏bug问题发现,你会分析吗?-千里马实战作业挑战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

hi,粉丝朋友们:

大家都知道马哥课程以实战为特色,这里的实战就是最贴近公司里面开发的实战项目。这些实战主要来自哪呢?
1、以前在公司的工作积累,自己在公司做过什么,这部分比较好毕竟都是搞过的
2、根据市场的上各个公司发布手机产品的调研,把相关特色功能搞过来给大家作为实战项目案例,这个部分实战是最多最难的,你想想各个公司产品功能那得有多少,我得做出来教给大家
3、以上2个是我大部分的课程实战的来源,还有一个重要的,那就是学员的都在各个公司从事framework,会遇到很多的经典难题bug等搞不定时候,也会经常请教马哥,马哥会挑出一些和课程贴近的,aosp上面可以复现的就会帮忙来搞定

大家想想马哥的课程都是基于以上的背景做出的实战课程,是不是比公司里面学的东西,获取的实战经验要丰富多了。

比如今天来探讨一个**马哥国际学员全程英文答疑、、、**的一个bug,这个兄弟学员在aosp上面尝试修改,发现了个bug无法修复,然后一直请教马哥这边,大概问题现象如下:
在这里插入图片描述

上面截图大家明显发现分屏左边有一半黑屏的异常,这类黑屏等问题说实话哪怕对于很多framework开发的老司机都很难分析。

你一看如果完全不知道怎么入手的话,,,说实话那也是正常。。,如果你一看已经有了自己分析思路,那么恭喜你可以继续往下看看这个bug是怎么出现的复现步骤,但是离修复还是有很大距离哈。

问题复现步骤路径

声明环境

这边为了和国际学员保持一致是aosp14,这里我感觉其实aosp 13一样有问题。
即你如果没有14代码你就在13上试试,实在不行就用aosp14

问题修改背景

原生aosp的分屏一般divide分割线拖拉只有3个档位,大概%25,%50,%75
在这里插入图片描述

但是对于横屏情况下的分屏却只有%50一个档位的分割线
在这里插入图片描述

所以为了实现这个需求,肯定就需要做相关的修改具体的如下:

要把config修改,让横屏也和竖屏一样

diff --git a/core/res/res/values-land/config.xml b/core/res/res/values-land/config.xml
index 7308dc5882c1..948d542a0cf7 100644
--- a/core/res/res/values-land/config.xml
+++ b/core/res/res/values-land/config.xml
@@ -15,5 +15,5 @@~ limitations under the License--><resources>
-    <integer name="config_dockedStackDividerSnapMode">2</integer>
-</resources>
\ No newline at end of file
+    <integer name="config_dockedStackDividerSnapMode">0</integer>
+</resources>

DividerSnapAlgorithm.java的修改

diff --git a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java
index a065e2b78d80..881757dd8342 100644
--- a/core/java/com/android/internal/policy/DividerSnapAlgorithm.java
+++ b/core/java/com/android/internal/policy/DividerSnapAlgorithm.java
@@ -350,9 +350,9 @@ public class DividerSnapAlgorithm {* meets the minimal size requirement.*/private void maybeAddTarget(int position, int smallerSize) {
-        if (smallerSize >= mMinimalSizeResizableTask) {
+        //if (smallerSize >= mMinimalSizeResizableTask) {mTargets.add(new SnapTarget(position, position, SnapTarget.FLAG_NONE));
-        }
+        //}}

修改后效果如下:
在这里插入图片描述

是不是感觉效果还是很好的。。。一切都完美,准备公司得表扬了。。。可是万万你没有想到,居然提测时候发现开头那个黑屏问题

在这里插入图片描述

你是不是心里想,。。。。我就改了个配置而已,为啥会引入个黑屏的bug,这下完蛋了,压根不知道为啥引入的啊,修改就那么简单两句代码而已。。。。

怎么复现呢?

1、横屏进入分屏,拖divider到最左边%25位置
2、旋转手机变成竖屏停留1s,再回到横屏
3、拖动divider到%50情况下就出现上面横屏分屏黑屏情况

留给大家的作业:

上面就是一个非常真实的企业实战的bug,而且也很经典,很符合很多人修改framework的需求的情况,毕竟大家都很喜欢看到快速修改效果,这期间很可能你会去百度啥的copy人家代码,跑起来了就一顿开心,可是往往没有深入理解透彻,可能就是你挖出天坑第一步,后面测试一测相关引入的bug,就是对你前面偷懒的惩罚哈哈哈,总之告诉你,想彻底掌握那么就必须要全面理解。

那么上面的黑屏问题马哥就留给课程学员的作业,这个作业是给大家一个非常好巩固自己学习知识的案例。

更多framework干货获取相关可以 私聊+v(androidframework007)
点击这里 https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw
视频:https://www.bilibili.com/video/BV1ah411d7Y3
在这里插入图片描述

这篇关于android framework分屏“官方”黑屏bug问题发现,你会分析吗?-千里马实战作业挑战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/437537

相关文章

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制