前言

难道我现已彻底学习鸿蒙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)
      })

好了,一个阶段的学习告一段落,在接下来几天我计划把常识巩固一下,然后去找点案例敲敲练手。我的分享希望大家能喜欢。