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

相关文章

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干