当前位置: 首页 > article >正文

aosp安卓15新特性dump的wms窗口层级树优化的更加美观

背景:

近来在体验调试aosp15时候,使用了dumpsys activity containers时候,发现wms层级结构树有一个巨大的变化。
aosp15上层级结构树很多学员朋友对这个优化改进都给出巨大的点赞,有的学员朋友还想老版本自己实现一下这种树绘制:
在这里插入图片描述

对比安卓14老版本情况

b2a1774f478593d.png)

明显可以看出以前的wms层级结构树看着不像一颗树,靠的序号和空格在区分,但是层级一多,而且相差不多时候,如果只相差一层空格就不明显了,经常可能需要对半天才对的清楚。

aosp15和老版本的源码分析对比:

aosp15代码

/**
     * Dumps the names of this container children in the input print writer indenting each
     * level with the input prefix.
     */
    public void dumpChildrenNames(PrintWriter pw, String prefix, boolean isLastChild) {
        int curWinMode = getWindowingMode();
        String winMode = windowingModeToString(curWinMode);
        if (curWinMode != WINDOWING_MODE_UNDEFINED &&
                curWinMode != WINDOWING_MODE_FULLSCREEN) {
            winMode = winMode.toUpperCase();
        }
        int requestedWinMode = getRequestedOverrideWindowingMode();
        String overrideWinMode = windowingModeToString(requestedWinMode);
        if (requestedWinMode != WINDOWING_MODE_UNDEFINED &&
                requestedWinMode != WINDOWING_MODE_FULLSCREEN) {
            overrideWinMode = overrideWinMode.toUpperCase();
        }
        String actType = activityTypeToString(getActivityType());
        if (getActivityType() != ACTIVITY_TYPE_UNDEFINED
                && getActivityType() != ACTIVITY_TYPE_STANDARD) {
            actType = actType.toUpperCase();
        }
        pw.print(prefix + (isLastChild ? "└─ " : "├─ "));//isLastChild属于新参数,绘制树枝的看看是不是最后一个child
        pw.println(getName()
                + " type=" + actType
                + " mode=" + winMode
                + " override-mode=" + overrideWinMode
                + " requested-bounds=" + getRequestedOverrideBounds().toShortString()
                + " bounds=" + getBounds().toShortString());

        String childPrefix = prefix + (isLastChild ? "   " : "│  ");//注意这个是给子节点的标签,要么是空格要么是竖线
        for (int i = getChildCount() - 1; i >= 0; --i) {
            final E cc = getChildAt(i);
            cc.dumpChildrenNames(pw, childPrefix, i == 0 /* isLastChild */);
        }
    }

aosp14代码

      /**
     * Dumps the names of this container children in the input print writer indenting each
     * level with the input prefix.
     */
    public void dumpChildrenNames(PrintWriter pw, String prefix) {
        final String childPrefix = prefix + " ";//这里有给每一层增加空格
        pw.println(getName()
                + " type=" + activityTypeToString(getActivityType())
                + " mode=" + windowingModeToString(getWindowingMode())
                + " override-mode=" + windowingModeToString(getRequestedOverrideWindowingMode())
                + " requested-bounds=" + getRequestedOverrideBounds().toShortString()
                + " bounds=" + getBounds().toShortString());
        for (int i = getChildCount() - 1; i >= 0; --i) {
            final E cc = getChildAt(i);
            pw.print(childPrefix + "#" + i + " ");//这里主要表示child的索引
            cc.dumpChildrenNames(pw, childPrefix);
        }
    }

更多framework实战干货内容资料,请关注下面“千里马学框架”


http://www.kler.cn/a/384980.html

相关文章:

  • 时序动作定位 | 基于层次结构潜在注意模型的弱监督动作定位(ICCV 2023)
  • EPPlus 开源项目的编译和使用
  • Spring Security 框架篇-深入了解 Spring Security 的授权核心功能(RBAC 权限模型、自定义异常处理器、校验权限方法)
  • Vue3中使用LogicFlow实现简单流程图
  • 【bug日志-水】解决本地开发下代理和url同名导致刷新404的问题
  • 九识智能与徐工汽车达成战略合作,共绘商用车未来新蓝图
  • HBuilderX运行微信小程序,编译的文件在哪,怎么运行
  • 【西藏】《西藏自治区本级政务信息化项目建设和运维费用预算支出标准》(藏财建〔2024〕68号)-省市费用标准解读系列08
  • 一文读懂| 自注意力与交叉注意力机制在计算机视觉中作用与基本原理
  • 数据挖掘(八)
  • 论文阅读笔记:DRCT: Saving Image Super-Resolution away from Information Bottleneck
  • Windows磁盘管理右键无法删除卷,右键只有帮助选项按钮
  • C++11的简介
  • 第8章 利用CSS制作导航菜单作业
  • JAVA:数据库(mysql)编程初步学习\JDBC(附带项目文件)
  • Maven随笔
  • 你是我的映射,我是你的值:C++ map 中的心灵共鸣
  • 太速科技-634-基于3U PXIe的VU3P FMC+数据接口板
  • 旋转位置编码
  • Flutter 主流常用第三方库、插件收集
  • Mybatis中的缓存
  • 定性数据分析 (QDA) 软件NVivo V15现已发布!融合AI让数据分析更出色!
  • 每日一题——第一百二十一题
  • 2024 网鼎杯 - 青龙组 Web WP
  • Chrome调试工具(查看CSS属性)
  • Java每日刷题之二分算法