openharmony launcher 调研笔记(02)UI 调用逻辑

news2024/10/7 9:22:49

最近在看launcher,把自己调研的点做个笔记,持续修改更新中个人笔记酌情参考

=========================================================================

EntryView

         Column() {
                  PageDesktopLayout();
         }
        .height(this.workSpaceHeight)

        // this.mWorkSpaceHeight = this.mScreenHeight - this.mSysUIBottomHeight - this.mDockHeight;  工作区的高度 等于 屏幕高度 - 底部控制按钮区域高度 - Dock栏高度

        Column() {
                  SmartDock();
        }
        .height(this.dockHeight) //dock栏高度

---------------------------------------------------------------------------------------------------------------------------------

PageDesktopLayout

        aboutToAppear

             this.deviceType = AppStorage.get('deviceType') as string; // 设备类型 phone

             this.mPageDesktopDragHandler = PageDesktopDragHandler.getInstance();// 获取Drag相关类

             mPageDesktopViewModel = PageDesktopViewModel.getInstance();// 构造函数初始化很多数据

                        PageDesktopViewModel 构造

                        this.mPageDesktopModel = PageDesktopModel.getInstance();// 桌面model
                        this.mFolderModel = BigFolderModel.getInstance(); // 文件夹model
                        this.mFormModel = FormModel.getInstance(); // 卡片model
                        this.mSettingsModel = SettingsModel.getInstance(); // launcher 设置model
                        this.mBadgeManager = BadgeManager.getInstance(); // 角标管理器
                        this.mFormListInfoCacheManager = FormListInfoCacheManager.getInstance();

                         // 卡片缓存数据管理类
                        this.mSettingsModel.forceReloadConfig(); // 强制从磁盘重新加载所有配置
                        this.mSettingsModel.addObserver(this.mSettingsChangeObserver);
                        this.onPageDesktopCreate(); // 注册监听
                        this.mGridConfig = this.getGridConfig(); // 获得网格配置
                        this.pageDesktopStyleConfig =         // 获取桌面显示样式配置                                                      

                              layoutConfigManager.getStyleConfig(

                                 PageDesktopGridStyleConfig.APP_GRID_STYLE_CONFIG,

                                 PageDesktopConstants.FEATURE_NAME);
                       this.formDetailLayoutConfig =   // 获取卡片布局详细配置

                              layoutConfigManager.getStyleConfig(

                                   FormDetailLayoutConfig.FORM_LAYOUT_INFO,

                                   PageDesktopConstants.FEATURE_NAME);

                        PageDesktopViewModel 构造

                this.gridConfig = mPageDesktopViewModel.getGridConfig().layout;

               // 获取 布局的 (??此处没搞明白为什么是 -1X0 ,代码逻辑上应该是4X4

                                         且 SettingsModel.getGridConfig执行了四次)

                mPageDesktopViewModel.registerAppListChangeCallback(); // 注册 app 列表变化监听

                CloseAppManager.getInstance().registerCloseAppHandler(

                                                new PageDesktopCloseAppHandler()); // 注册app 关闭监听

进入build

 GridSwiper({
      gridConfig: this.gridConfig,
      mPageDesktopViewModel: mPageDesktopViewModel,
      dialogController: this.deviceType == CommonConstants.PAD_DEVICE_TYPE ? null : this.dialogController
    }).id(`${TAG}`)
      .width(StyleConstants.PERCENTAGE_100)
      .height(StyleConstants.PERCENTAGE_100)
  }

---------------------------------------------------------------------------------------------------------------------------------

GridSwiper

        aboutToAppear

                this.mPageDesktopViewModel = PageDesktopViewModel.getInstance();

                // 显示桌面model

                this.mPageDesktopViewModel.setSwiperController(this.swiperController);

                // 设置swiperController

        buildLog  //if (this.buildLog()) {} 

                // 此处为false ,AppStorage.get('isDesktopLoadFinished')此时还未被设置为true

        if (this.desktopLoadFinished) {   

                // 此处第一次加载时未被初始化为 ture

                // 直到dock 初始化完成后 发送了 SMARTDOCK_INIT_FINISHED 事件触发

                //  PageDesktopViewModel  的 getGridList() 函数 ,进一步调用 getAppList()

                //  AppStorage.setOrCreate('isDesktopLoadFinished', true); 执行后此值才被设置成 true

                //  isDesktopLoadFinished true 后 加载  Swiper 进一步 加载 SwiperPage

---------------------------------------------------------------------------------------------------------------------------------

SwiperPage

        aboutToAppear

              updateDeskTopScreen

                // 更新桌面样式,触发 EVENT_REQUEST_PAGEDESK_ITEM_UPDATE 事件

                // 再次调用 PageDesktopViewModel  的 getGridList() 函数 及 getAppList()等

        build() // 开始 正式渲染显示

                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1573303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用GPT需要注意的事项

GPT出来之后,基本就告别浏览器搜索问题答案了。将问题原封不动的copy给GPT基本可以得到解答。 但是这个也有弊端,那就是太依赖GPT了。 1,使用GPT需要更强的专业知识:除了能问对问题,还要具备识别GPT&q…

Tomcat管理配置

Tomcat管理配置 1 host-manager项目2 manager项目 Tomcat 提供了Web版的管理控制台,位于webapps目录下。Tomcat 提供了用于管理Host的host-manager和用于管理Web应用的manager。 1 host-manager项目 Tomcat启动之后,可以通过 http://localhost:8080/ho…

【51单片机入门记录】RTC(实时时钟)-DS1302概述

目录 一、基于三线通信的RTC-DS1302 (1)简介 (2)特性 (3)引脚介绍 (4)控制字的格式 (5.0)日历时钟寄存器介绍 (5.1)日历时钟寄存…

阿里巴巴拍立淘API新功能揭秘:图片秒搜商品,实现智能化个性化购物新体验

在数字化快速发展的今天,智能化和个性化已经成为购物体验中不可或缺的元素。为了满足消费者日益增长的购物需求,阿里巴巴中国站不断推陈出新,其中拍立淘API的新功能——图片秒搜商品,无疑为智能化个性化购物体验开创了新的篇章。 …

数据挖掘入门项目二手交易车价格预测之建模调参

文章目录 目标步骤1. 调整数据类型,减少数据在内存中占用的空间2. 使用线性回归来简单建模3. 五折交叉验证4. 模拟真实业务情况5. 绘制学习率曲线与验证曲线6. 嵌入式特征选择6. 非线性模型7. 模型调参(1) 贪心调参(2)…

IDEA/PyCharm/GoLand同时打开2个分支

背景 想对比2个分支的代码,或者在A分支开发时,需要看B分支,切来切去太麻烦,而且新写的代码还没法直接切到B分支。 操作方法 假如有A、B 2个分支。 通过git worktree为B分支新建1个worktree,然后通过打开新项目的方式…

谷歌在生成式人工智能领域的挑战与机遇:内部纷争与市场压力下的战略调整

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

第12届蓝桥杯省赛 ---- C/C++ C组

文章目录 1. ASC2. 空间3. 卡片4. 相乘5. 路径6.时间显示7.最少砝码8. 杨辉三角形9. 左孩子右兄弟 第12届蓝桥杯省赛&#xff0c;C/C C组真题&#xff0c;第10题不是很清楚&#xff0c;题解不敢乱放&#x1f601;&#x1f601;&#x1f601; 1. ASC 额。。。。 #include <i…

【数据库】SQL简介

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库管理系统&#xff08;RDBMS&#xff09;的标准化语言。它用于访问和操作数据库中的数据&#xff0c;执行各种任务&#xff0c;如插入、更新、删除和检索数据&#x…

为何一个网卡需要配置多个IP地址?

在Linux环境中&#xff0c;一个网卡配置多个IP地址是一个常见且强大的网络管理策略&#x1f6e0;️。这种策略不仅增加了网络的灵活性和效率&#xff0c;还能满足特定的网络需求和应用场景&#x1f3af;。让我们一探究竟&#xff0c;看看在哪些情况下&#xff0c;为什么一个网卡…

可行驶区域(freespace)如何标注

可行驶区域&#xff08;freespace&#xff09;如何标注 附赠自动驾驶学习资料和量产经验&#xff1a;链接 可行驶区域的检测主要是为自动驾驶提供路径规划辅助&#xff0c;可以实现整个的路面检测&#xff0c;也可以只提取出部分的道路信息&#xff0c;不同的环境&#xff0c;…

HAL STM32主从定时器联级使用

HAL STM32主从定时器联级使用 具体介绍参考STM32参考手册 &#x1f33f;主从定时器联级&#xff1a;使用一个定时器作为另一个定时器的预分频器。 &#x1f341;时钟关系&#xff1a; &#x1f33f;TIM1 和TIM8 控制寄存器 2(TIMx_CR2)相关位&#xff1a; &#x1f516;主…

静态路由协议实验综合实验

需求&#xff1a; 1、除R5的换回地址已固定外&#xff0c;整个其他所有的网段基于192.168.1.0/24进行合理的IP地址划分。 2、R1-R4每台路由器存在两个环回接口&#xff0c;用于模拟连接PC的网段&#xff1b;地址也在192.168.1.0/24这个网络范围内。 3、R1-R4上不能直接编写到…

opencv+python(通道的分离与合并)笔记

分割图像通道&#xff1a; 通过函数mvsplit(img)&#xff1b;mv返回的通道&#xff1b; RGB有3个通道&#xff1b;灰度图只有一个通道&#xff1b; b,g,r cv2.split(img)cv2.imshow("b",b)#通道bcv2.imshow("g",g)#通道gcv2.imshow("r",r)#通道…

算法:指数的更相减损术

举例&#xff1a;当我们想求9&#xff08;3^2&#xff09;与27&#xff08;3^3&#xff09;的最大共同基&#xff0c;也就是3时&#xff0c;该怎么做呢&#xff0c;这时就要用到指数的更相减损术&#xff0c;如下图所示&#xff1a;

【mac操作】brew指令集

brew指令集记录 1. brew search 【软件名称】2. rm -rf $(brew --cache)3. brew install 【软件名】4. brew uninstall 【软件名】5. 未完待续&#xff0c;&#xff0c;&#xff0c;&#xff0c; 官网路径&#xff1a; Homebrew官网 最上面就来一个homebrew安装指令吧&#xf…

用讲故事的方式学Pandas的数据结构之Series

在一个遥远的数据王国中&#xff0c;有一个被称为Pandas的魔法图书馆&#xff0c;它拥有处理数据的强大力量。图书馆里有三位伟大的守护者&#xff0c;人们称他们为“数据处理三剑客”&#xff1a;Numpy&#xff0c;Pandas&#xff0c;和Matplotlib。今天&#xff0c;我们将聚焦…

R语言实现:统计学及计量专业中的多种平均值计算方式

平均值在计量专业和统计学中有着广泛的应用如&#xff1a;描述数据集中趋势、比较不同组数据、评估数据的代表性、决策和判断、回归分析概率统计与财务分析等。此外&#xff0c;在计量专业中&#xff0c;平均值还被广泛应用于各种测量和校准过程中&#xff0c;以确保测量结果的…

AI大语言模型GPT —— R 生态环境领域数据统计分析

自2022年GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型的发布以来&#xff0c;它以其卓越的自然语言处理能力和广泛的应用潜力&#xff0c;在学术界和工业界掀起了一场革命。在短短一年多的时间里&#xff0c;GPT已经在多个领域展现出其独特的价值…

博客部署001-centos安装docker

1、安装docker 1.1 卸载旧版本的 Docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine1.2 设置 Docker 仓库 安装 Docker Engine 之前&#xff0c;首先需要设置…