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

                

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

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

相关文章

Java | Leetcode Java题解之第14题最长公共前缀

题目: 题解: class Solution {public String longestCommonPrefix(String[] strs) {if (strs null || strs.length 0) {return "";}int minLength Integer.MAX_VALUE;for (String str : strs) {minLength Math.min(minLength, str.length…

008 CSS盒子模型

文章目录 盒子模型内容-宽度和高度内边距-padding边框-border圆角-border-radius 外边距-margin上下margin的传递上下margin的折叠块级元素的水平居中行内级元素(包括inline-block元素)的水平居中 外轮廓-outline盒子阴影-box-shadow文字阴影-text-shadow行内非替换元素的特殊性…

第四百四十四回

文章目录 1. 问题描述2. 优化方法2.1 缩小范围2.2 替代方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取AppBar的高度"相关的内容,本章回中将介绍关于MediaQuery的优化.闲话休提,让我们一起Talk Flutter吧。 1. 问题描述 我们在…

【.Net】DotNetty

文章目录 概述NIO和BIO、AIODotNetty适用场景DotNetty的整体架构和模块DotNetty的使用示例来源 概述 本系列文章主要讲述由微软Azure团队研发的.net的版本的netty,Dotnetty。所有的开发都将基于.net core 3.1版本进行开发。 Dotnetty是什么,原本Netty是…

前端面试题--CSS系列(一)

CSS系列--持续更新中 1.CSS预处理器有哪些类型,有什么区别2.盒模型是什么,有哪两种类型3.css选择器有哪些,优先级是怎样的,哪些属性可以继承4. 说说em/px/rem/vh/vw的区别5.元素实现水平垂直居中的方法有哪些,如果元素…

QT 线程之movetothread

上文列举了qt中线程的几种方法,其中2种方法最为常见。 本文以实例的方式描述了movetothread()这种线程的方法,将QObject的子类移动到指定的线程。 一、例子 1. Worker类 1.1Worker类头文件 #ifndef WORKER_H #define WORKER_H…

vue-指令v-for

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>vue-指令v-for</title> </head> …

【前端】JavaScript(概念+语法+形式+变量+数组+函数+作用域)

文章目录 JavaScript一、JavsScript概念1.JavaScript的开发方向2.JavaScript和CSS、HTML的关系3.JavaScript运行过程4.JavaScript的组成 二、JavaScript的语法1.JS的书写形式1.行内式2.内嵌式3.外部式4.注释5.输入输出1.prompt和alert2.输出: console.log 2.变量的使用1.创建变…

java-Stream原理及相关操作详解(filter、map、flatMap、peek、reduce、anyMatch等等)

java-Stream原理及相关操作详解 Stream流前言Stream流原理介绍Stream-Api常用方法介绍filter()map()flatMappeekreducemax、minfindAny、 findFirstallMatch、anyMatch、noneMatchsortedcount Stream流前言 Java8特性主要是Stream流以及函数式接口的出现&#xff1b;本片文章主…

【Java设计模式】创建型——工厂方法模式

目录 背景/问题解决方案思路方案 图解简单工厂模式/静态工厂模式工厂方法模式 代码示例&#xff1a;图形工厂意图主要解决何时使用如何解决关键代码 工厂模式的优点工厂模式的缺点使用场景注意事项 背景/问题 在软件设计中&#xff0c;我们经常遇到需要创建不同类型对象的情况…

主成分分析相关的方法

数据降维是指通过保留数据的重要信息&#xff0c;将高维数据转换为低维数据的过程。这有助于减少数据的复杂性、提高计算效率、消除噪音等。以下是一些常见的数据降维方法&#xff1a; 1、主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;&#xff1a; …

torchvision中的数据集使用

torchvision中的数据集使用 使用和下载CIFAR10数据集 输出测试集中的第一个元素&#xff08;输出img信息和target&#xff09; 查看分类classes 打断点–>右键Debug–>找到classes 代码 import torchvisiontrain_set torchvision.datasets.CIFAR10(root"./data…

实现点击用户头像或者id与其用户进行聊天(vue+springboot+WebSocket)

用户点击id直接与另一位用户聊天 前端如此&#xff1a; <template><!-- 消息盒子 --><div class"content-box" :style"contentWidth"><!-- 头像&#xff0c;用户名 --><div class"content-box-top box--flex">&l…

36.基于SpringBoot + Vue实现的前后端分离-高校汉服租赁网站系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的高校汉服租赁网站系统设计与实现管理…

【数据库】SQL简介

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

阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云

8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…

c#编程基础学习之基本语句

目录 if...else语句If...Else 简写语句(三元运算符)switch语句while循环Do/While 循环for循环foreach 循环break和continue语句 if…else语句 C# 条件语句用于根据不同条件执行不同动作。 a < b a < b a > b a > b a b a ! bC# 具有以下条件语句&#xff1a; 使…

SpringBoot3整合RabbitMQ之二_简单队列模型案例

SpringBoot3整合RabbitMQ之二_简单队列模型案例 文章目录 SpringBoot3整合RabbitMQ之二_简单队列模型案例1. 简单队列模型1. 消息发布者1. 创建简单队列的配置类2. 发布消费Controller 2. 消息消费者3. 输出结果 1. 简单队列模型 简单队列模型就是点对点发布消息&#xff0c;有…

虚拟机VMware启动虚拟机刚启动有网之后没网

虚拟机VMware启动虚拟机刚启动有网之后没网 害&#xff0c;感觉这种调试的事情是真的浪费时间 如题&#xff0c;对于这种情况&#xff0c;一句话&#xff0c;就是你本地的DHCP虚拟机服务以及NAT网络服务没启动 本机windowR,输入services.msc 进入服务 然后 喏&#xff0c;…

ffmpeg 从现有视频中截取一段

ffmpeg 从现有视频中截取一段 References ffmpeg -i ./input.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:25 ./output.mp4 -y strongforeverstrong:~/ForeverStrong$ ffmpeg -i ./train_video.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:25 ./output…