背景
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