高性能容器类
顾名思义,容器类是一个存储类,用于存储各种数据类型的元素,并提供一系列处理数据元素的方法。ArkUI 开发框架提供了两种类型的容器类,线性和非线性。这些容器类是用类似的静态语言实现的。
declare class List<T> {
constructor();
length: number;
add(element: T): boolean;
get(index: number): T;
has(element: T): boolean;
getIndexOf(element: T): number;
removeByIndex(index: number): T;
remove(element: T): boolean;
getLastIndexOf(element: T): number;
forEach(callbackfn: (value: T, index?: number, List?: List<T>) => void,
thisArg?: Object): void;
convertToArray(): Array<T>;
isEmpty(): boolean;
[Symbol.iterator](): IterableIterator<T>;
// 省略部分API
}
复制代码
它们通过限制存储位置和属性、确保对数据的有效访问和提高应用程序的性能,使每种类型的数据能够在完成其自身功能的基础上切断冗余分支。本章将介绍 ArkUI 开发框架中的各种类型的容器类以及相关 API 的使用。
ArrayList 是一个动态数组,可用于构造全局数组对象。根据通用定义,ArrayList 要求存储位置是一个连续的内存空间,初始容量为 10,并支持动态扩展。每次扩建是原容量的 1.5 倍。添加、删除、修改和查询 ArrayList 的相关 API 如下:
declare class ArrayList<T> {
constructor();
length: number;
add(element: T): boolean;
insert(element: T, index: number): void;
has(element: T): boolean;
getIndexOf(element: T): number;
removeByIndex(index: number): T;
remove(element: T): boolean;
getLastIndexOf(element: T): number;
removeByRange(fromIndex: number, toIndex: number): void;
replaceAllElements(callbackfn: (value: T, index?: number, arrlist?: ArrayList<T>) => T,
thisArg?: Object): void;
forEach(callbackfn: (value: T, index?: number, arrlist?: ArrayList<T>) => void,
thisArg?: Object): void;
sort(comparator?: (firstValue: T, secondValue: T) => number): void;
clear(): void;
isEmpty(): boolean;
// 省略部分API
}
复制代码
Badge
interface BadgeInterface {
(value: BadgeParamWithNumber): BadgeAttribute;
(value: BadgeParamWithString): BadgeAttribute;
}
declare interface BadgeParam {
position?: BadgePosition;
style: BadgeStyle;
}
declare interface BadgeParamWithNumber extends BadgeParam {
count: number;
maxCount?: number;
}
declare interface BadgeParamWithString extends BadgeParam {
value: string;
}
declare interface BadgeParam {
position?: BadgePosition;
style: BadgeStyle;
}
复制代码
Badge 的构造方法允许接收 BadgeParamWithNumber 和 BadgeParameWithString 参数,这两个参数都是从 BadgeParam 继承的。BadgeParam 参数描述如下:位置:设置徽章的显示位置。BadgePosition 提供以下三个位置:右:徽章显示在右垂直中心。RightTop(默认):徽章显示在右上角。左:徽章显示在左垂直中心。样式:设置徽章的显示样式。BadgeStyle 参数描述如下:颜色:设置徽章的文本颜色,默认为白色。FontSize:设置徽章的文本字体大小。默认值为 10 vp。BadgeSize:设置徽章的显示大小。徽章颜色:设置徽章的背景颜色,默认为红色。
原子化服务代码简析
创建原子化服务项目后,系统将默认在条目的 js 目录和 FormAbility 目录中生成页面模板和服务管理。页面模板是一种标准的原子化卡片布局,页面表示页面集,索引表示特定模块。服务管理为服务状态更改提供回调,在该回调中可以更新卡数据。
<div class="container">
<stack> // 堆叠式布局
<div class="container-img">
<image src="/common/widget.png" class="bg-img"/> // 设备卡片背景
</div>
<div class="container-inner">
<text class="title"> // 设置标题
{{ $t('strings.title_immersive') }}
</text>
<text class="detail_text" onclick="routerEvent"> // 设备内容,点击时触发routerEvent事件
{{ $t('strings.detail_immersive') }}
</text>
</div>
</stack>
</div>
复制代码
类将 onclick 事件添加到“detail_text”的文本组件。单击组件时,触发 routerEvent 的事件回调。RouterEvent 在 index 中布局代码在 json 文件中配置,演示效果如下:
表达式持久化
'@ohos.data.存储模块提供的存储接口有存储数据的要求,用户的计算数据很大,因此将计算表达式数据存储在数据库中是合适的。ArkUI 开发框架可在“@ohos”上获得。data rdb'模块提供了一套完整的接口,用于基于 SQLite 组件 RdbStore 管理本地数据库,它提供了一系列用于添加、删除、修改和查询的方法,并支持运行 SQL 语句以满足复杂场景的需要。创建 ExpressionManager 类,该类负责添加、删除、修改和查询 Expression 数据。代码如下:
let DB_NAME = "calculator.db";
let TB_NAME = "calculator_expression";
let COL_ID = "id";
let COL_OD = "ownerId";
let COL_EP = "expression";
let COL_RT = "result";
let COL_CM = "comment";
let COL_TM = "time";
let DB_CONFIG = { name: DB_NAME };
let CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TB_NAME + " ( " +
COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL_OD + " INTEGER, " +
COL_EP + " TEXT, " +
COL_RT + " INTEGER, " +
COL_CM + " TEXT, " +
COL_TM + " INTEGER" +
")";
export class ExpressionManager {
public static init() {
ExpressionManager.get().initDB();
}
public static get() {
if(null == INSTANCE) {
INSTANCE = new ExpressionManager();
}
return INSTANCE;
}
private rdbStore: rdb.RdbStore;
private constructor() {
}
// 删除Expression
public deleteExpression(expression: Expression) {
if(expression && this.rdbStore) {
var sql = "delete from " + TB_NAME + " where " + COL_ID + " = " + expression.id;
this.rdbStore.executeSql(sql, null, (error, result) => {
if(error) {
Logger.log(JSON.stringify(error));
}
});
}
}
复制代码
ExpressionManager 提供添加、删除、修改和查询表达式等操作。它在内部缓存 RdbStore 实例,以便于后续修改表达式。因此,需要在 APP 启动时初始化 ExpressionManager,当 APP 启动 ets 的 onCreate()方法时,
评论