前言
难道我现已彻底学习鸿蒙HarmonyOS了吗?no~~no~no,只能说我学习鸿蒙的前期常识点在这里告一段落了,当然整个HarmonyOS是十分庞大的,仅仅前期这一阶段算是完结了,后边有新的常识我再更新。在此我十分感激传智博学谷的鸿蒙课程,我跟着它学习有完整的学习路线,一起遇到问题也能及时处理掉,学习也进程十分有趣。
一、运用状况
ArtTS供给了好几种状况用来帮助我们办理我们的大局数据
- State组件内状况
- LocalStorage-UIAbility状况(内存- 留意:和前端的区分隔,它非耐久化,非全运用)
- AppStorage- 运用内状况-多UIAbility同享-(内存-非耐久化-退出运用相同消失)
- PersistenStroage-大局耐久化状况(写入磁盘-耐久化状况-退出运用 数据相同存在)
1. UIAbility内状况-LocalStorage
LocalStorage
是页面级的UI状况存储,经过 @Entry
装修器接收的参数能够在页面内同享同一个 LocalStorage
实例。 LocalStorage
也能够在 UIAbility
内,页面间同享状况。
用法
- 创立
LocalStorage
实例:const storage = new LocalStorage({ key: value })
- 单向
@LocalStorageProp('user')
组件内可变 - 双向
@LocalStorageLink('user')
大局均可变
LocalStorage页面间同享
如果你想在UIAbility
中同享某个localStorage,能够在入口处直接初始化传入
- 能够在loadContent进程中直接传入创立的LocalStorage
-
const storage = LocalStorage.GetShared()
得到实例 - 经过
@Entry(storage)
传入页面
2. 运用状况-AppStorage
AppStorage
是运用大局的UI状况存储,是和运用的进程绑定的,由UI框架在运用程序启动时创立,为运用程序UI状况特点供给中心存储。-留意它也是内存数据,不会写入磁盘
初始化数据:
**AppStorage.SetOrCreate(key,value)**
运用数据:
第一种用法-运用UI修饰符
-
单向
**@StorageProp(key) 变量**
组件内可变 -
双向
**@StorageLink(key) 变量**
大局均可变
第二种用法 运用API办法
-
**AppStorage.Get<ValueType>(key)**
获取数据 -
**AppStorage.Set<ValueType>(key,value)**
掩盖数据 -
**const link: SubscribedAbstractProperty<ValueType> = AppStorage.Link(key)**
掩盖数据 -
-
**link.set(value)**
修正 -
**link.get()**
获取
-
*留意:*AppStorage创立同享数据,可是运用毁掉后就不存在数据了。
3. 状况耐久化-PersistentStorage
PersistentStorage将选定的AppStorage特点保留在设备磁盘上。
3.1 选定耐久化PersistentStorage.PersistProp()
经过PersistentStorage.PersistProp()办法指定耐久化数据
语法:PersistentStorage.PersistProp(‘数据名’,”),数据名对应AppStorage中存的数据
PersistentStorage.PersistProp('mess', '')
AppStorage.SetOrCreate('mess', '同享数据')
3.2 删去耐久化PersistentStorage.DeleteProp()
经过PersistentStorage.DeleteProp()办法指定删去耐久化的数据
语法:PersistentStorage.DeleteProp(‘数据名’)
PersistentStorage.DeleteProp('mess')
4.Environment:设备环境查询
开发者如果需求运用程序运转的设备的环境参数,以此来作出不同的场景判别,比方多语言,暗黑模式等,需求用到Environment设备环境查询。
Environment是ArkUI框架在运用程序启动时创立的单例对象。它为AppStorage供给了一系列描绘运用程序运转状况的特点。Environment的一切特点都是不可变的(即运用不可写入) ,一切的特点都是简单类型。
*留意:*Environment设置的信息经过AppStorage获取
语法:Environment.EnvProp(特点,值)
Environment.EnvProp('private', '中文')
promptAction.showToast({message: AppStorage.Get('private')})
二、体系才能
1. 用户首选项-数据耐久化
用户首选项为运用供给Key-Value键值型的数据处理才能,支持运用耐久化轻量级数据,并对其修正和查询。当用户希望有一个大局仅有存储的当地,能够采用用户首选项来进行存储。
1.1 获取首选项实例
经过*preferences.getPreferences(参数1,参数2)*获取到实例,参数1是context上下文,参数2是姓名,类似于数据库名
1.2 操作首选项
调用*get(姓名,数据)办法进行数据获取,调用put(姓名,数据)*进行数据存储,
调用*delete(姓名)*进行数据删去
留意:*当对数据修正和删去以后,需求preferences.flush()*进行保存
class MessageStore {
async getStore() {
return await preferences.getPreferences(getContext(this), 'message_store')
}
async setMessageList(json: string) {
const store = await this.getStore()
await store.put('message_list', json)
await store.flush()
}
async getMessageList() {
const store = await this.getStore()
const data = await store.get('message_list', '[]') as string
return JSON.parse(data) as MessageItem[]
}
async deleteMessageList(){
const store = await this.getStore()
await store.delete('message_list')
await store.flush()
}
}
2. Canvas绘图
这其实不是体系才能部分常识点,仅仅我在学习体系才能的常识时穿插了Canvas的常识,所以我把它加在这里。
Canvas供给画布组件,用于自定义绘制图形。
语法:Canvas(画笔参数)
画笔settings:
settings = new ReaneringContextSettings(true)
发生画笔:
context = new CanvasRenderingContext2D()
canvasSettings = new RenderingContextSettings(true)
canvasContext = new CanvasRenderingContext2D(this.canvasSettings)
Canvas(this.canvasContext)
.width(252)
.aspectRatio(1)
.backgroundColor('#eee')
.onReady(() => {
// this.canvasContext.strokeRect(10,10, 50,50)
// this.canvasContext.fillRect(100,100, 30,30)
this.canvasContext.rotate(45 * Math.PI / 180)
this.canvasContext.drawImage(this.imgBit,0,0,252,252)
})
3. 公共事件与告诉
3.1 消息告诉-NotificationManager模块
本模块供给告诉办理的才能,包含发布、撤销发布告诉,创立、获取、移除告诉通道,获取告诉的使能状况、角标使能状况,获取告诉的相关信息等。
Ⅰ:发布告诉notificationManager.publish(request),request参数用于设置要发布告诉的内容和相关配置信息。
request参数:为notificationManager.NotificationRequest类型,是描绘告诉的请求。内容如下:
request: {
id, //告诉ID
context: { // 告诉内容
contentType, // 告诉内容类型
normal? // 基本类型告诉内容
},
wantAgent //封装了运用的行为目的,点击告诉时触发该行为
}
留意:contentType有多种类型,不同类型的告诉内容参数不一样,必需要一一对应。
wantAgent是一个want值,具体内容如下:
const want = wantAgent.getWantAgent({
wants:[], // 将被执行的动作列表。
operationType, // 动作类型。
requestCode // 运用者定义的一个私有值。
})
留意:wantAgent.getWantAgent()回来一个promise,所以能够运用async/await处理
示例:
Button('发送消息')
.onClick(async(event: ClickEvent) => {
const want = await wantAgent.getWantAgent({
wants: [
{
bundleName: "com.example.myapplication",
abilityName: "EntryAbility"
}
],
operationType: wantAgent.OperationType.START_ABILITY,
requestCode: 0
})
const info: notificationManager.NotificationRequest = {
id: this.infoId,
content: {
contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
normal: {
title: "温馨提示",
text: "明日天气降温,请留意保温!",
additionalText: '天气预报'
}
},
wantAgent: want
}
notificationManager.publish(info)
})
Ⅱ:经过告诉ID和告诉标签撤销已发布的告诉notificationManager.cancel(id),id参数是告诉ID
Button('撤销告诉').onClick((event: ClickEvent) => {
notificationManager.cancel(this.infoId)
})
3.2 后台代理提示reminderAgentManager模块
运用退到后台或进程终止后,仍然有一些提示用户的守时类使命。当前支持的提示类型包含:倒计时、日历和闹钟。运用需求权限:ohos.permission.PUBLISH_AGENT_REMINDER
Ⅰ:发布提示(倒计时、日历或闹钟)reminderAgentManager.publishReminder(reminderReq),reminderReq参数是需求发布的提示实例。
reminderReq参数类型与发布类型挂钩,具体如下:
reminderAgentManager.ReminderRequestCalendar 日历实例对象,用于设置提示的时刻。
reminderAgentManager.ReminderRequestAlarm 闹钟实例对象,用于设置提示的时刻。
reminderAgentManager.ReminderRequestTimer 倒计时实例对象,用于设置提示的时刻。
内容如下:
request: {
reminderType, //指明提示类型
...一些对应时刻的参数
}
留意:reminderType有多种类型,它获得类型要与reminderReq的类型一致。
Button('发布闹钟').onClick((event: ClickEvent) => {
const reminderRequest : reminderAgentManager.ReminderRequestAlarm = {
reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_ALARM,
hour: 2,
minute: 51,
daysOfWeek: [],
ringDuration: 60
}
reminderAgentManager.publishReminder(reminderRequest)
})
Ⅱ:撤销指定id的提示,reminderAgentManager.cancelReminder(id),id参数是告诉ID
Button('中止闹钟')
.onClick(async () => {
await reminderAgentManager.cancelReminder(this.id)
})
好了,一个阶段的学习告一段落,在接下来几天我计划把常识巩固一下,然后去找点案例敲敲练手。我的分享希望大家能喜欢。