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

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

1、HarmonyOS 关于屏幕高度?

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

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

onWindowStageCreate(windowStage: window.WindowStage) {
  // Main window is created, set main page for this ability
  hilog.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.kler.cn/a/454580.html

相关文章:

  • LabVIEW应用在工业车间
  • 双柱渐变图背景图
  • [OpenGL]使用 Compute Shader 实现矩阵点乘
  • memory泄露分析方法(Binder,Window,View篇)
  • node.js和js
  • 免费资源网站
  • std::is_trivial
  • 龙智出席2024零跑智能汽车技术论坛,分享功能安全、需求管理、版本管理、代码扫描等DevSecOps落地实践
  • 聚类的主要算法和介绍
  • 25上半年软考初级信息处理技术员易混淆知识点
  • RabbitMQ中的批量Confirm模式:提升消息可靠性与性能
  • 王佩丰24节Excel学习笔记——第二十讲:图表基础
  • Elasticsearch 集群
  • WordPress TutorLMS插件 SQL注入漏洞复现(CVE-2024-10400)(附脚本)
  • 秒鲨后端之MyBatis【3】自定义映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件(30000字)
  • D类音频应用EMI管理
  • Day57 图论part07
  • JAVA开发初级入门之-如何快速将Java开发环境搭建,优雅草央千澈快速IDEA与JDK安装配置环境教程一文让你搞定-java开发必修课之一
  • OpenLinkSaas使用手册-简介
  • 【蓝桥杯】压缩字符串
  • Linux-----进程处理(文件IO资源使用)
  • 让 AMD GPU 在大语言模型推理中崭露头角:机遇与挑战
  • Unity如何判断Animator当前播放的动画已经结束
  • Go的Slice如何扩容
  • 游戏引擎学习第57天
  • 「下载」5G智慧园区整体解决方案:架构IOC核心平台层,信息全面集成共享