鸿蒙Harmony应用开发—ArkTS-应用级变量的状态管理

状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。

说明:

本模块首批接口从API version 7开始支持,后续版本的新增接口,采用上角标单独标记接口的起始版本。

本文中T和S的含义如下:

类型描述
TClass,number,boolean,string和这些类型的数组形式。
Snumber,boolean,string。

AppStorage

AppStorage具体UI使用说明,详见AppStorage(应用全局的UI状态存储)

link10+

static link(propName: string): SubscribedAbstractProperty

与AppStorage中对应的propName建立双向数据绑定。如果给定的propName在AppStorage中存在,返回与AppStorage中propName对应属性的双向绑定数据。

双向绑定数据的修改会同步回AppStorage中,AppStorage会将变化同步到所有绑定该propName的数据和自定义组件中。

如果AppStorage中不存在propName,则返回undefined。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
SubscribedAbstractProperty<T>返回双向绑定的数据,如果AppStorage不存在对应的propName,则返回undefined。
AppStorage.setOrCreate('PropA', 47);
let linkToPropA1:SubscribedAbstractProperty<number> = AppStorage.link('PropA');
let linkToPropA2:SubscribedAbstractProperty<number> = AppStorage.link('PropA'); // linkToPropA2.get() == 47
linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48

setAndLink10+

static setAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T>

与Link接口类似,如果给定的propName在AppStorage中存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName,返回其双向绑定数据。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。
defaultValueT当propName在AppStorage中不存在,使用defaultValue在AppStorage中初始化对应的propName。

返回值:

类型描述
SubscribedAbstractProperty<T>SubscribedAbstractProperty<T>的实例,和AppStorage中propName对应属性的双向绑定的数据。
AppStorage.setOrCreate('PropA', 47);
let link1: SubscribedAbstractProperty<number> = AppStorage.setAndLink('PropB', 49); // Create PropB 49
let link2: SubscribedAbstractProperty<number> = AppStorage.setAndLink('PropA', 50); // PropA exists, remains 47

prop10+

static prop<T>(propName: string): SubscribedAbstractProperty<T>

与AppStorage中对应的propName建立单向属性绑定。如果给定的propName在AppStorage中存在,则返回与AppStorage中propName对应属性的单向绑定数据。如果AppStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回AppStorage中。

说明: Prop仅支持简单类型。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
SubscribedAbstractProperty<T>返回单向绑定的数据,如果AppStorage不存在对应的propName,则返回undefined。
AppStorage.setOrCreate('PropA', 47);
let prop1: SubscribedAbstractProperty<number> = AppStorage.prop('PropA');
let prop2: SubscribedAbstractProperty<number> = AppStorage.prop('PropA');
prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47

setAndProp10+

static setAndProp<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T>

与Prop接口类似。如果给定的propName在AppStorage存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在AppStorage创建和初始化propName对应的属性,返回其单向绑定数据。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。
defaultValueT当propName在AppStorage中不存在时,使用default在AppStorage中初始化对应的propName。

返回值:

类型描述
SubscribedAbstractProperty<T>SubscribedAbstractProperty<T>的实例。
AppStorage.setOrCreate('PropA', 47);
let prop: SubscribedAbstractProperty<number> = AppStorage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49

has10+

static has(propName: string): boolean

判断propName对应的属性是否在AppStorage中存在。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
boolean如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。
AppStorage.has('simpleProp');

get10+

static get<T>(propName: string): T | undefined

获取propName在AppStorage中对应的属性。如果不存在返回undefined。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
T | undefinedAppStorage中propName对应的属性,如果不存在返回undefined。
AppStorage.setOrCreate('PropA', 47);
let value: number = AppStorage.get('PropA') as number; // 47

set10+

static set<T>(propName: string, newValue: T): boolean

在AppStorage中设置propName对应属性的值。如果newValue的值和propName对应属性的值相同,即不需要做赋值操作,状态变量不会通知UI刷新propName对应属性的值。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。
newValueT属性值,不能为undefined或null。

返回值:

类型描述
boolean如果AppStorage不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功则返回true。
AppStorage.setOrCreate('PropA', 48);
let res: boolean = AppStorage.set('PropA', 47) // true
let res1: boolean = AppStorage.set('PropB', 47) // false

setOrCreate10+

static setOrCreate<T>(propName: string, newValue: T): void

如果propName已经在AppStorage中存在,并且newValue和propName对应属性的值不同,则设置propName对应属性的值为newValue,否则状态变量不会通知UI刷新propName对应属性的值。 如果propName不存在,则创建propName属性,值为newValue。setOrCreate只可以创建单个AppStorage的键值对,如果想创建多个AppStrage键值对,可以多次调用此方法。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。
newValueT属性值,不能为undefined或null。
AppStorage.setOrCreate('simpleProp', 121);

delete10+

static delete(propName: string): boolean

在AppStorage中删除propName对应的属性。

在AppStorage中删除该属性的前提是必须保证该属性没有订阅者。如果有订阅者,则返回false。删除成功返回true。

属性的订阅者为Link、Prop等接口绑定的propName,以及@StorageLink('propName')和@StorageProp('propName')。这就意味着如果自定义组件中使用@StorageLink('propName')和@StorageProp('propName')或者SubscribedAbstractProperty实例依旧对propName有同步关系,则该属性不能从AppStorage中删除。

参数:

参数名类型必填参数描述
propNamestringAppStorage中的属性名。

返回值:

类型描述
boolean如果AppStorage中有对应的属性,且该属性已经没有订阅者,则删除成功,返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。
AppStorage.setOrCreate('PropA', 47);
AppStorage.link<number>('PropA');
let res: boolean = AppStorage.delete('PropA'); // false, PropA still has a subscriber

AppStorage.setOrCreate('PropB', 48);
let res1: boolean = AppStorage.delete('PropB'); // true, PropB is deleted from AppStorage successfully

keys10+

static keys(): IterableIterator<string>

返回AppStorage中所有的属性名。

返回值:

类型描述
IterableIterator<string>AppStorage中所有的属性名。
AppStorage.setOrCreate('PropB', 48);
let keys: IterableIterator<string> = AppStorage.keys();

clear10+

static clear(): boolean

清除AppStorage的所有的属性。在AppStorage中清除所有属性的前提是,已经没有任何订阅者。如果有,则什么都不做返回false;删除成功返回true。

订阅者的含义和参考Delete。

返回值:

类型描述
boolean如果AppStorage中的属性已经没有订阅者,则清除成功,返回true。否则返回false。
AppStorage.setOrCreate('PropA', 47);
let res: boolean = AppStorage.clear(); // true, there are no subscribers

size10+

static size(): number

返回AppStorage中的属性数量。

返回值:

类型描述
number返回AppStorage中属性的数量。
AppStorage.setOrCreate('PropB', 48);
let res: number = AppStorage.size(); // 1

LocalStorage9+

LocalStorage具体UI使用说明,详见LocalStorage(页面级UI状态存储)

constructor9+

constructor(initializingProperties?: Object)

创建一个新的LocalStorage实例。使用Object.keys(initializingProperties)返回的属性和其数值,初始化LocalStorage实例。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
initializingPropertiesObject用initializingProperties包含的属性和数值初始化LocalStorage。initializingProperties不能为undefined。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);

getShared10+

static getShared(): LocalStorage

获取当前stage共享的LocalStorage实例。

从API version 9开始,该接口支持在ArkTS卡片中使用。

**模型约束:**此接口仅可在Stage模型下使用。

返回值:

类型描述
LocalStorage返回LocalStorage实例。

getShared具体使用,见在UI页面通过getShared接口获取在通过loadContent共享的LocalStorage实例

has9+

has(propName: string): boolean

判断propName对应的属性是否在LocalStorage中存在。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。

返回值:

类型描述
boolean如果propName对应的属性在AppStorage中存在,则返回true。不存在则返回false。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
storage.has('PropA'); // true

get9+

get<T>(propName: string): T | undefined

获取propName在LocalStorage中对应的属性。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。

返回值:

类型描述
T | undefinedLocalStorage中propName对应的属性,如果不存在返回undefined。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let value: number = storage.get('PropA') as number; // 47

set9+

set<T>(propName: string, newValue: T): boolean

在LocalStorage中设置propName对应属性的值。如果newValue的值和propName对应属性的值相同,即不需要做赋值操作,状态变量不会通知UI刷新propName对应属性的值。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。
newValueT属性值,不能为undefined或者null。

返回值:

类型描述
boolean如果LocalStorage不存在propName对应的属性,或者设置的newValue是undefined或者null,返回false。设置成功返回true。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let res: boolean = storage.set('PropA', 47); // true
let res1: boolean = storage.set('PropB', 47); // false

setOrCreate9+

setOrCreate<T>(propName: string, newValue: T): boolean

如果propName已经在LocalStorage中存在,并且newValue和propName对应属性的值不同,则设置propName对应属性的值为newValue,否则状态变量不会通知UI刷新propName对应属性的值。 如果propName不存在,则创建propName属性,值为newValue。setOrCreate只可以创建单个LocalStorage的键值对,如果想创建多个LocalStorage键值对,可以多次调用此方法。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。
newValueT属性值,不能为undefined或者null。

返回值:

类型描述
boolean如果设置的newValue是undefined或者null,返回false。
如果LocalStorage存在propName,则更新其值为newValue,返回true。
如果LocalStorage不存在propName,则创建propName,并初始化其值为newValue,返回true。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let res: boolean =storage.setOrCreate('PropA', 121); // true
let res1: boolean =storage.setOrCreate('PropB', 111); // true
let res2: boolean =storage.setOrCreate('PropB', null); // false

link9+

link<T>(propName: string): SubscribedAbstractProperty<T>

如果给定的propName在LocalStorage实例中存在,则返回与LocalStorage中propName对应属性的双向绑定数据。

双向绑定数据的修改会被同步回LocalStorage中,LocalStorage会将变化同步到所有绑定该propName的数据和Component中。

如果LocalStorage中不存在propName,则返回undefined。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。

返回值:

类型描述
SubscribedAbstractProperty<T>SubscribedAbstractProperty<T>的实例,如果AppStorage不存在对应的propName,再返回undefined。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let linkToPropA1: SubscribedAbstractProperty<number> = storage.link('PropA');
let linkToPropA2: SubscribedAbstractProperty<number> = storage.link('PropA'); // linkToPropA2.get() == 47
linkToPropA1.set(48); // 双向同步: linkToPropA1.get() == linkToPropA2.get() == 48

setAndLink9+

setAndLink<T>(propName: string, defaultValue: T): SubscribedAbstractProperty<T>

与Link接口类似,如果给定的propName在LocalStorage存在,则返回该propName对应的属性的双向绑定数据。如果不存在,则使用defaultValue在LocalStorage创建和初始化propName,返回其双向绑定数据。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。
defaultValueT当propName在LocalStorage中不存在,使用default在LocalStorage中初始化对应的propName。

返回值:

类型描述
SubscribedAbstractProperty<T>SubscribedAbstractProperty<T>的实例,如果AppStorage不存在对应的propName,再返回undefined。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let link1: SubscribedAbstractProperty<number> = storage.setAndLink('PropB', 49); // Create PropB 49
let link2: SubscribedAbstractProperty<number> = storage.setAndLink('PropA', 50); // PropA exists, remains 47

prop9+

prop<S>(propName: string): SubscribedAbstractProperty<S>

如果给定的propName在LocalStorage存在,则返回与LocalStorage中propName对应属性的单向绑定数据。如果LocalStorage中不存在propName,则返回undefined。单向绑定数据的修改不会被同步回LocalStorage中。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。

返回值:

类型描述
SubscribedAbstractProperty<S>SubscribedAbstractProperty<S>的实例,如果AppStorage不存在对应的propName,在返回undefined。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let prop1: SubscribedAbstractProperty<number> = storage.prop('PropA');
let prop2: SubscribedAbstractProperty<number> = storage.prop('PropA');
prop1.set(1); // one-way sync: prop1.get()=1; but prop2.get() == 47

setAndProp9+

setAndProp<S>(propName: string, defaultValue: S): SubscribedAbstractProperty<S>

propName在LocalStorage存在,则返回该propName对应的属性的单向绑定数据。如果不存在,则使用defaultValue在LocalStorage创建和初始化propName对应的属性,返回其单向绑定数据。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。
defaultValueS当propName在AppStorage中不存在,使用default在AppStorage中初始化对应的propName。

返回值:

类型描述
SubscribedAbstractProperty<S>SubscribedAbstractProperty<S>的实例,和AppStorage中propName对应属性的单向绑定的数据。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let prop: SubscribedAbstractProperty<number> = storage.setAndProp('PropB', 49); // PropA -> 47, PropB -> 49

delete9+

delete(propName: string): boolean

在LocalStorage中删除propName对应的属性。删除属性的前提是该属性已经没有订阅者,如果有则返回false。删除成功则返回true。

属性的订阅者是link,prop接口绑定的propName,以及@LocalStorageLink('propName')和@LocalStorageProp('propName')。如果自定义组件Component中使用或者SubscribedAbstractProperty(link和prop接口的返回类型)依旧有同步关系,则该属性不能从LocalStorage中删除。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
propNamestringLocalStorage中的属性名。

返回值:

类型描述
boolean如果LocalStorage中有对应的属性,且该属性已经没有订阅者,则删除成功返回true。如果属性不存在,或者该属性还存在订阅者,则返回false。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
storage.link<number>('PropA');
let res: boolean = storage.delete('PropA'); // false, PropA still has a subscriber
let res1: boolean = storage.delete('PropB'); // false, PropB is not in storage
storage.setOrCreate('PropB', 48);
let res2: boolean = storage.delete('PropB'); // true, PropB is deleted from storage successfully

keys9+

keys(): IterableIterator<string>

返回AppStorage中所有的属性名。

从API version 9开始,该接口支持在ArkTS卡片中使用。

返回值:

类型描述
IterableIterator<string>LocalStorage中所有的属性名。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let keys: IterableIterator<string> = storage.keys();

size9+

size(): number

返回LocalStorage中的属性数量。

从API version 9开始,该接口支持在ArkTS卡片中使用。

返回值:

类型描述
number返回键值对的数量。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let res: number = storage.size(); // 1

clear9+

clear(): boolean

清除LocalStorage的所有的属性。在LocalStorage中清除所有属性的前提是已经没有任何订阅者。如果有则返回false;清除成功返回true。

从API version 9开始,该接口支持在ArkTS卡片中使用。

返回值:

类型描述
boolean如果LocalStorage中的属性已经没有任何订阅者,则清除成功,返回true。否则返回false。
let para:Record<string,number> = { 'PropA': 47 };
let storage: LocalStorage = new LocalStorage(para);
let res: boolean = storage.clear(); // true, there are no subscribers

SubscribedAbstractProperty

get9+

abstract get(): T

读取从AppStorage/LocalStorage同步属性的数据。

从API version 9开始,该接口支持在ArkTS卡片中使用。

返回值:

类型描述
TAppStorage/LocalStorage同步属性的数据。
AppStorage.SetOrCreate('PropA', 47); 
let prop1:SubscribedAbstractProperty<number> = AppStorage.Prop('PropA');    
prop1.get(); //  prop1.get()=47

set9+

abstract set(newValue: T): void

设置AppStorage/LocalStorage同步属性的数据。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名类型必填参数描述
newValueT要设置的数据。
AppStorage.SetOrCreate('PropA', 47);
let prop1:SubscribedAbstractProperty<number> = AppStorage.Prop('PropA');
prop1.set(1); //  prop1.get()=1

aboutToBeDeleted10+

abstract aboutToBeDeleted(): void

取消SubscribedAbstractProperty实例对AppStorage/LocalStorage单/双向同步关系。

AppStorage.SetOrCreate('PropA', 47);
let link = AppStorage.SetAndLink('PropB', 49); // PropA -> 47, PropB -> 49
link.aboutToBeDeleted();
link.set(50); // PropB -> 49, link.get() --> undefined

PersistentStorage

PersistentStorage具体UI使用说明,详见PersistentStorage(持久化存储UI状态)

PersistPropsOptions

参数名类型必填参数描述
keystring属性名。
defaultValuenumber|string|boolean在PersistentStorage和AppStorage未查询到时,则使用默认值初始化初始化它。不允许为undefined和null。

persistProp10+

static persistProp<T>(key: string, defaultValue: T): void

将AppStorage中key对应的属性持久化到文件中。该接口的调用通常在访问AppStorage之前。

确定属性的类型和值的顺序如下:

  1. 如果PersistentStorage文件中存在key对应的属性,在AppStorage中创建对应的propName,并用在PersistentStorage中找到的key的属性初始化。

  2. 如果PersistentStorage文件中没有查询到key对应的属性,则在AppStorage中查找key对应的属性。如果找到key对应的属性,则将该属性持久化。

  3. 如果AppStorage也没查找到key对应的属性,则在AppStorage中创建key对应的属性。用defaultValue初始化其值,并将该属性持久化。

根据上述的初始化流程,如果AppStorage中有该属性,则会使用其值,覆盖掉PersistentStorage文件中的值。由于AppStorage是内存内数据,该行为会导致数据丧失持久化能力。

参数:

参数名类型必填参数描述
keystring属性名。
defaultValueT在PersistentStorage和AppStorage未查询到时,则使用默认值初始化初始化它。不允许为undefined和null。

示例:

persistProp具体使用,见从AppStorage中访问PersistentStorage初始化的属性

deleteProp10+

static deleteProp(key: string): void

PersistProp的逆向操作。将key对应的属性从PersistentStorage删除,后续AppStorage的操作,对PersistentStorage不会再有影响。

参数:

参数名类型必填参数描述
keystringPersistentStorage中的属性名。
PersistentStorage.deleteProp('highScore');

persistProps10+

static persistProps(props: PersistPropsOptions[]): void

行为和PersistProp类似,不同在于可以一次性持久化多个数据,适合在应用启动的时候初始化。

参数:

参数名类型必填参数描述
propsPersistPropsOptions[]持久化数组。
PersistentStorage.persistProps([{ key: 'highScore', defaultValue: '0' }, { key: 'wightScore', defaultValue: '1' }]);

keys10+

static keys(): Array<string>

返回所有持久化属性的key的数组。

返回值:

类型描述
Array<string>返回所有持久化属性的key的数组。
let keys: Array<string> = PersistentStorage.keys();

Environment

Environment具体使用说明,详见Environment(设备环境查询)

EnvPropsOptions

参数名类型必填参数描述
keystring环境变量名称,支持的范围详见内置环境变量说明。
defaultValuenumber|string|boolean查询不到环境变量key,则使用defaultValue作为默认值存入AppStorage中。

envProp10+

static envProp<S>(key: string, value: S): boolean

将Environment的内置环境变量key存入AppStorage中。如果系统中未查询到Environment环境变量key的值,则使用默认值value,存入成功,返回true。如果AppStorage已经有对应的key,则返回false。

所以建议在程序启动的时候调用该接口。

在没有调用EnvProp,就使用AppStorage读取环境变量是错误的。

参数:

参数名类型必填参数描述
keystring环境变量名称,支持的范围详见内置环境变量说明。
valueS查询不到环境变量key,则使用value作为默认值存入AppStorage中。

返回值:

类型描述
boolean如果key对应的属性在AppStorage中存在,则返回false。不存在则在AppStorage中创建key对应的属性,返回true。

示例:

EnvProp具体使用,见从UI中访问Environment参数

envProps10+

static envProps(props: EnvPropsOptions[]): void

和EnvProp类似,不同点在于参数为数组,可以一次性初始化多个数据。建议在应用启动时调用,将系统环境变量批量存入AppStorage中。

参数:

参数名类型必填参数描述
propsEnvPropsOptions[]系统环境变量和默认值的键值对的数组。
Environment.envProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, {
  key: 'languageCode',
  defaultValue: 'en'
}, { key: 'prop', defaultValue: 'hhhh' }]);

keys10+

static keys(): Array<string>

返回环境变量的属性key的数组。

返回值:

类型描述
Array<string>返回关联的系统项数组。
Environment.envProps([{ key: 'accessibilityEnabled', defaultValue: 'default' }, {
  key: 'languageCode',
  defaultValue: 'en'
}, { key: 'prop', defaultValue: 'hhhh' }]);

let keys: Array<string> = Environment.keys(); // accessibilityEnabled, languageCode, prop

内置环境变量说明

key类型说明
accessibilityEnabledstring无障碍屏幕朗读是否启用。
colorModeColorMode深浅色模式,可选值为:
- ColorMode.LIGHT:浅色模式;
- ColorMode.DARK:深色模式。
fontScalenumber字体大小比例。
fontWeightScalenumber字重比例。
layoutDirectionLayoutDirection布局方向类型,可选值为:
- LayoutDirection.LTR:从左到右;
- LayoutDirection.RTL:从右到左。
languageCodestring当前系统语言,小写字母,例如zh。

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(HarmonyOS NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

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

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

相关文章

echarts多个折线图共用一个x轴和tooltip组件

实现效果 根据接口传来的数据&#xff0c;使用echarts绘制出&#xff0c;共用一个x轴的图表 功能&#xff1a;后端将所有数据传送过来&#xff0c;前端通过监听选中值来展示对应的图表数据 数据格式&#xff1a; 代码&#xff1a; <template><div><div clas…

乐优商城(九)数据同步RabbitMQ

1. 项目问题分析 现在项目中有三个独立的微服务&#xff1a; 商品微服务&#xff1a;原始数据保存在 MySQL 中&#xff0c;从 MySQL 中增删改查商品数据。搜索微服务&#xff1a;原始数据保存在 ES 的索引库中&#xff0c;从 ES 中查询商品数据。商品详情微服务&#xff1a;做…

电脑显示丢失mfc140u.dll怎么办?五种可解决方法分享

DLL&#xff08;动态链接库&#xff09;是一种常见的文件类型&#xff0c;它包含了可以被多个程序共享的代码和数据。MFC140u.dll就是这样一种DLL文件&#xff0c;它的全称是Microsoft Foundation Class Library 14.0 Unicode Version。那么&#xff0c;mfc140u.dll是什么&…

Mybatis-plus的查询方法

1、selectById&#xff08;通过id查询&#xff09; 2、selectOne&#xff08;通过条件查询&#xff0c;返回一条&#xff09; 3、selectBatchIds&#xff08;通过多条id查询&#xff09; 借鉴&#xff1a;http://t.csdnimg.cn/cFP1d 4、selectByMap&#xff08;以键值对的形式…

深度解析深度学习中的长短期记忆网络(LSTM)(含代码实现)

在深度学习中&#xff0c;长短期记忆网络&#xff08;LSTM&#xff09;是一种强大的循环神经网络结构&#xff0c;能够更好地处理长序列数据并减轻梯度消失的问题。本文将介绍LSTM的工作原理&#xff0c;并使用PyTorch实现一个简单的LSTM模型来展示其在自然语言处理中的应用。 …

八、C#计数排序算法

简介 计数排序是一种非比较性的排序算法&#xff0c;适用于排序一定范围内的整数。它的基本思想是通过统计每个元素的出现次数&#xff0c;然后根据元素的大小依次输出排序结果。 实现原理 首先找出待排序数组中的最大值max和最小值min。 创建一个长度为max-min1的数组count…

数据结构->手把手教入门栈与列队(基础)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 1.什么是栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许…

SpringBoot 邮件服务集成配置全面解析

前言 本文以网易邮箱&#xff08;及 163 邮箱&#xff09;为例&#xff0c;展示如何为 SpringBoot 项目集成邮件服务&#xff0c;其他邮箱配置类似&#xff0c;可以自行查看 Spring Email 指南 或是其他官方文档 授权码 首先我们需要获取授权码&#xff0c;用于后续配置&…

[MAUI]集成高德地图组件至.NET MAUI Blazor项目

文章目录 前期准备&#xff1a;注册高德开发者并创建 key登录控制台创建 key获取 key 和密钥 创建项目创建JS API Loader配置权限创建定义创建模型创建地图组件创建交互逻辑 项目地址 地图组件在手机App中常用地理相关业务&#xff0c;如查看线下门店&#xff0c;设置导航&…

Linux进程的管理和进程的状态

进程的基本概念&#xff1a; 程序的一个执行实例 &#xff0c;正在执行的程序等等 ——— 课本概念 担当分配系统资源的实体&#xff0c;例如cpu时间&#xff0c;内存 -----内核的观点 一、进程的管理 processbar 存储在磁盘中的可执行文件 可执行文件在启动/运行的同时&…

2024阿里云域名优惠口令大全_你要的【优惠口令】都在这!

2024年阿里云域名优惠口令&#xff0c;com域名续费优惠口令“com批量注册更享优惠”&#xff0c;cn域名续费优惠口令“cn注册多个价格更优”&#xff0c;cn域名注册优惠口令“互联网上的中国标识”&#xff0c;阿里云优惠口令是域名专属的优惠码&#xff0c;可用于域名注册、续…

解决修改数据后,前端页面不显示问题

如图&#xff0c;修改数据后&#xff0c;在前端页面不显示的问题&#xff0c;可能是因为缓存问题 解决方案 以为Edge浏览器为例 打开设置左边栏点击隐私&#xff0c;搜索和服务选择清除 Internet Explorer 的浏览数据点击删除&#xff0c;重新启动前端界面即可。

2024年阿里云服务器优惠价格表_一张表清晰明了

2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

python--循环(作业)

作业一&#xff1a; 判断一个数是否为质数&#xff08;素数&#xff09; flag True prime int(input("请输入一个整数&#xff1a;")) for num in range(2, prime):if prime % num 0:flag Falsebreak if flag:print("它是质数") else:print("它…

01.绝对路径和相对路径(Linux基本概念)

基础认知&#xff1a; 电脑的目录结构是一颗多叉树。不管是Linux还是windows&#xff0c;目录结构都是一样的。所以我们在查找某个目录或者文件的时候&#xff0c;本质就是在多叉树结点的查找。多叉树示例图如下&#xff1a; ​​​​​​​ ​​​​​​​ ​​…

指尖论文怎么用 #经验分享#学习方法

指尖论文是一款优秀的论文写作、查重降重工具&#xff0c;被广泛认可为高效、可靠、方便的辅助工具。那么&#xff0c;如何正确地使用指尖论文呢&#xff1f; 首先&#xff0c;用户需要注册一个指尖论文的账号&#xff0c;并登录到平台上。注册过程非常简单&#xff0c;只需要输…

总结: HQL语句

总结: HQL语句 Part1 数据库的操作Part2 数据表的操作1. 创建普通表2. 内外部表3. 内外部表转换 Part1 数据库的操作 查看数据库: show databases; 创建数据库: create database if not exists 数据库名 使用数据库: use 数据库名; 查看数据库详细信息: desc database 数据库名…

java数据结构与算法基础-----字符串------正则表达式的练习案例---持续补充中

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 正则表达式基础&#xff1a;https://blog.csdn.net/grd_java/article/det…

springboot297毕业生实习与就业管理系统的设计与实现

毕业生实习与就业管理系统 摘 要 使用旧方法对毕业生实习与就业管理系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在毕业生实习与就业管理系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数…

升级 HarmonyOS 4 版本,腕上智慧更进一步

HUAWEI WATCH GT 3 系列升级 HarmonyOS 4 新版本后&#xff0c;手表体验更进一步&#xff0c;快来看看有哪些变化吧~