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

最近在看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() // 开始 正式渲染显示

                

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】海洋生物数据集,图片分类

文章目录 任务描述数据收集数据处理模型训练指标评测web app代码和帮助 任务描述 收集9种以上的海洋生物图片,然后基于深度学习做一个分类模型,训练完成后,分类模型就可以对未知图片进行分类。 在之后随便传一张图片,分类模型就…

016——DHT11驱动开发(基于I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 电路描述 1.3 通信协议 二、 驱动程序 三、 应用程序 四、 上机实验 一、 模块介绍 1.1 简介 DHT11 是一款可测量温度和湿度的传感器。比如市面上一些空气加湿器,会测量空气中湿度,再根据测量结果决定是否继续加…

【vite】-【vite介绍】-【vite的基础应用】-【vite的高级应用】-【

目录 vite介绍vite的基础应用vite创建项目vite创建vue3项目vite创建vue2项目vite创建react项目 vite中使用css的各种功能vite中使用tsvite中处理静态资源的方法vite集成eslint和prettiervite中的env环境变量 vite的高级应用 vite介绍 一、特点: 开发时效率极高开箱…

springcloud第4季 springcloud-gateway网关的功能作用

一 网关 1.1 gateway的作用 网关可以实现: 权限过滤拦截,请求转发;组包拆包,加密解密,报文解析,协议转换等功能。 cloud gateway本身也是一个微服务,需要注册进服务到注册中心,从…

LeetCode 378 有序矩阵中第K小的元素

题目信息 LeetoCode地址: . - 力扣(LeetCode) 题解内容大量转载于:. - 力扣(LeetCode) 题目理解 题意很直观,就是求二维矩阵中所有元素排序后第k小的数。 最小堆写法 该写法不再赘述,维护…

simulink的硬件支持下,串口发送的模型,stm32f407的串口程序调试错误

串口调试助手能接收到数据,为何是8个数据?如之奈何? 参考文章: STM32CubeMxMATLAB Simulink串口输出实验_用stm32cubemx生成的串口都是输出-CSDN博客根据 该文章发送字符串 hello,发送数量为5,接收也是he…

解读命令:icacls “E:\ShareAll“ /grant “Everyone:(OI)(CI)(F)“

命令 icacls "E:\ShareAll" /grant "Everyone:(OI)(CI)(F)" 是在Windows操作系统中用来修改文件或目录权限的命令行操作。该命令执行以下操作: 路径:"E:\ShareAll" 指定了要更改权限的目录位置,即对E盘下的“S…

Cisco Packet Tracer配置AAA认证

出口路由器R1配置: ip domain-name cisco.com;写入设备的默认域名 crypto key generate rsa;产生rsa密钥 ip ssh secret cisco;启用ssh服务 enable secret cisco;设置特权模式密码 连接TACAS的路由器做同样配置 RADIUS服务器的配置 client ip 配置成RADIUS服务器…

二分法题集2

目录 1 山脉数组的峰顶索引 分析: 代码展示: 2 寻找峰值 分析: 代码展示: 3 寻找旋转排序数组中的最小值 分析: 代码展示: 4 点名 分析: 代码展示: 1 山脉数组的峰顶…

数据结构学习——栈和队列

1.栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 …

《BERT》论文笔记

原文链接: [1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (arxiv.org) 原文笔记: What: BETR:Pre-training of Deep Bidirectional Transformers for Language Understand…

Ruoyi-vue-pro Vue + nginx 二级目录部署到云服务器

http://www.your-server.com/ 这是一级目录,由于项目多,一般会通过二级域名http://oa.your-server.com/或二级目录http://www.your-server.com/oa来发布,本篇记录一下二级目录发布。先看效果 1、router/index.js配置base export default new …

对代理模式的理解

目录 一、前言二、案例1 代码2 自定义代理类【静态代理】2.1 一个接口多个实现,到底注入哪个依赖呢?2.1.1 Primary注解2.1.2 Resource注解(指定name属性)2.1.3 Qualifier注解 2.2 面向接口编程2.3 如果没接口咋办呢?2.…

算法基础课-搜索与图论

DFS 题目链接&#xff1a;842. 排列数字 - AcWing题库 思路&#xff1a;写的很好的题解AcWing 842. 排列数字--深度优先遍历代码注释 - AcWing #include<bits/stdc.h>using namespace std; int n; int st[10]; vector<int> a; void dfs(){if(a.size() n){for(in…

python标准数据类型--集合常用方法

在Python中&#xff0c;集合&#xff08;Set&#xff09;是一种无序且不重复的数据结构&#xff0c;它是由一个无序的、不重复的元素组成的。Python中的集合与数学中的集合概念相似&#xff0c;并且支持一系列常用的方法。本篇博客将深入介绍Python集合的常用方法&#xff0c;帮…

c# wpf XmlDataProvider 简单试验

1.概要 2.代码 <Window x:Class"WpfApp2.Window12"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend…

【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加

前言&#xff1a; &#x1f3af;个人博客&#xff1a;Dream_Chaser &#x1f388;博客专栏&#xff1a;C &#x1f4da;本篇内容&#xff1a;仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加 目录 917.仅仅反转字母 题目描述&am…

C#操作MySQL从入门到精通(5)——查询数据

前言 在和MySql数据库交互的过程中,查询数据是使用最频繁的操作,本文详细介绍了查询数据的各种操作,包括查询一列数据、 查询两列数据、查询所有列数据、查询不重复的数据、查询指定行数据,绝对是C#操作MySql数据库史上最详细教程,能够帮助小白快速入门以及将这些功能迅速…

【数据结构】考研真题攻克与重点知识点剖析 - 第 3 篇:栈、队列和数组

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

阿里云2核2G和2核4G轻量应用服务器优惠价格表,2024年最新报价

阿里云轻量应用服务器2核2G和2核4G配置优惠价格表&#xff0c;轻量2核2G3M带宽61元一年&#xff0c;轻量2核4G4M带宽165元1年&#xff0c;均不限制月流量&#xff0c;阿里云活动链接 aliyunfuwuqi.com/go/aliyun 活动打开如下图&#xff1a; 阿里云轻量应用服务器价格 61元/年…