【每日学点鸿蒙知识】屏幕高度、证书签名、深色模式对上架影响、Taskpool上下文、List触底加载更多

server/2024/12/29 11:02:05/
1、HarmonyOS 关于屏幕高度?

display.getDefaultDisplaySync 可以获取到整个屏幕的高度, 那顶部的状态栏和底部的安全区高度 怎么获取?

可以在EntryAbility里获取并存储,获取到的高度是px,所以用px2vp()转换为vp使用:

onWindowStageCreate(windowStage: window.WindowStage) {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');windowStage.loadContent('pages/Index', (err, data) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');let windowClass = windowStage.getMainWindowSync();let statusHeight = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRect.height;let bottomHeight = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR).bottomRect.height;AppStorage.setOrCreate('bottomHeight',px2vp(bottomHeight));AppStorage.setOrCreate('statusHeight',px2vp(statusHeight));});
}

在需要的界面使用 AppStorage.get(‘bottomHeight’),AppStorage.get(‘statusHeight’) 获取。

2、HarmonyOS 使用发布证书进行手动签名配置,不能运行安装应用到工程机上?

使用发布证书配置了手动签名,.cer和.p7b文件都是从AppGallery Connect上下载下来的。但是在DevEco Studio上点击运行,不能在工程机上安装。提示错误如下:安装HAP时提示“code:9568322 error: signature verification failed due to not trusted app source”。

使用发布证书进行手动签名安装hap包,同样要配置注册调试设备吗? 但是AppGallery Connect发布证书选项没有配置注册调试设备的地方。

该问题是由于签名中未包含该调试设备的UDID,请通过如下步骤进行解决。

  1. 使用自动签名。在连接设备后,重新为应用进行签名。具体步骤为:进入File > Project Structure > Project > Signing Configs界面,勾选“Automatically generate signature”(如果是API 8和9工程,需同时勾选“SupportHarmonyOS”),即可完成签名。如果未登录,请先单击Sign In进行登录,然后自动完成签名。
  2. 如果使用的是手动签名,请在AppGallery Connect中先将该调试设备注册调试设备并在申请Profile文件选择设备时添加该调试设备,重新申请Profile证书。发布证书签名的包是不能在本地进行调试安装
3、HarmonyOS APP未适配深色模式是否影响最终版本上架?
  1. APP未适配深色模式是否影响版本上架?
  2. 深色模式适配是否必须同时适配 手机、平板、2in1(pc)设备三端?

可以主动设置浅色模式,应用默认配置为跟随系统切换深浅色模式,如不希望应用跟随系统深浅色模式变化,可主动设置应用的深浅色风格。设置后,应用的深浅色模式固定,不会随系统改变。参考地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-light-dark-color-adaptation-V5#section19361879317
设置为浅色模式代码:getContext(this).getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT);

4、HarmonyOS 如何在taskPool中的@Concurrent方法中获取应用Context上下文?

在taskPool中的@Concurrent方法中直接调用getContext()会抛出异常,需要在taskPool中使用preference存储和relationalStore数据库;如何在taskPool中的@Concurrent方法安全的获取当前应该的ApplicationContext对象

@Concurrent允许使用local变量、入参和通过import引入的变量。禁止使用闭包变量。看下@Concurrent使用方法是否有误

5、HarmonyOS List 组件有触底加载更多的属性或方法吗?

可使用onReachEnd事件实现数据懒加载,在onReachEnd事件触发时,回调函数中异步获取指定条数的列表数据,每次列表滑动到底部获取下一页数据。
可参考如下官方文档:

  • 长列表加载性能优化:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/bpta-best-practices-long-list#section69931513103314

LazyForEach懒加载的原理和渲染过程如下:

  1. LazyForEach会根据屏幕可视区能够容纳显示的组件数量按需加载数据。
  2. 根据加载的数据量创建组件,挂载在组件树上,构建出一棵短小的组件树。即,屏幕可以展示多少列表项组件,就按需创建多少个ListItem组件节点挂载在List组件树根节点上。
  3. 屏幕可视区只展示部分组件。当可视区外的组件需要在屏幕内显示时,需要从头完成数据加载、组件创建、挂载组件树这一过程,直至渲染到屏幕上。

其数据加载、组件树挂载、页面渲染的示意图如下所示:
sh

LazyForEach实现了按需加载,针对列表数据量大、列表组件复杂的场景,减少了页面首次启动时一次性加载数据的时间消耗,减少了内存峰值。不过在长列表滑动的过程中,因为需要根据用户的滑动行为不断地加载新的内容,这需要进行额外的数据请求和处理,会增加滑动时的计算量,从而对性能产生一定的影响。然而,合理使用LazyForEach的按需加载能力,通过在滑动停止或达到某个阈值时才进行加载,可以减少不必要的计算和请求,从而提高性能,给用户带来更好的体验。总之,在实现按需加载的场景中,需要综合考虑性能和用户体验的平衡,合理地优化加载逻辑和渲染方式,以提升整体的性能表现。

  • LazyForEach:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-rendering-control-lazyforeach-V5

LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。


http://www.ppmy.cn/server/154181.html

相关文章

【C++ 真题】P5733 【深基6.例1】自动修正

【深基6.例1】自动修正 题目描述 大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 100 100 100 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。 输入格式 输入一行,一个字符串。 输出格式 输出一个字符…

基于人工智能时代政务智慧转型的实现前景初探

去年6月,我有幸聆听了由华政公共管理与政治学院精心组织的2019年MPA研究生高端论坛,上午场:由董海军(中共上海市委机构编制委员会办公室处长)主讲的深化机构改革的探索与实践,以及下午场:由束金…

小程序基础 —— 02 微信小程序账号注册

微信小程序账号注册 小程序开发与网页开发不一样,在开始微信小程序开发之前,需要访问微信公众平台,注册一个微信小程序账号。 有了小程序的账号以后,才可以开发和管理小程序,后续需要通过该账号进行开发信息的设置、…

python实战项目55:多线程爬取笔趣阁小说

python实战项目55:多线程爬取笔趣阁小说 一、明确需求二、单本小说下载三、使用concurrent.futures线程池模块下载并实现文件合并四、使用threading模块实现多线程下载并合并文件一、明确需求 需求是使用多线程爬取笔趣阁网站小说的所有章节内容并保存,多线程分别使用了conc…

服务器反应慢,秒杀设计

目录 服务器反应慢 线上服务器cup飙升,如果定位Java代码? 服务器变慢如何诊断处理? 线上接口负载剧增,快扛不住了,解决方法是什么? 秒杀设计 从全局角度如何设计一个秒杀系统 秒杀活动里遇到的问题 …

【黑马头条】day20—xxl-job

目录 1 今日内容 1.1 需求分析 1.2 实现思路 1.3 定时计算 1.4 定时任务框架-xxljob 1.5 学习目录 2.分布式任务调度 2.1 什么是分布式任务调度 2.2 xxl-Job简介 2.3 XXL-Job-环境搭建 2.4 配置部署调度中心-docker安装 2.5 xxl-job入门案例编写 2.6 任务详解-执行…

单提示分割所有医学图像

本文介绍了一种新的医学图像分割方法-单点分割。单提示分割结合了单次和交互式方法的优点。在推理阶段,只需一个提示样本,它就可以在一次向前传递中熟练地处理看不见的任务。github.com/KidsWithTokens/one-prompt

nvm node.js 版本管理工具

nvm 介绍 nvm 全称 Node Version Manager 顾名思义它是用来管理 node 版本的工具,方便切换不同版本的Node.js 使用 nvm 的使用非常的简单,跟 npm 的使用方法类似 下载安装 首先先下载 nvm,下载地址 https://github.com/coreybutler/nvm…