天天看點

OpenHarmony之 eTS FA調用 eTS ServiceAbilityOpenHarmony之 eTS FA調用 eTS ServiceAbility

OpenHarmony之 eTS FA調用 eTS ServiceAbility

(目錄)

1.介紹

本文是ServiceAbility樣例的實踐,主要展示了eTS FA調用 eTS PA ,實作一個字元串排序的功能, 這裡的PA 指的是ServiceAbility。Ability是應用所具備能力的抽象,也是應用程式的重要組成部分。一個應用可以具備多種能力(即可以包含多個Ability),HarmonyOS支援應用以Ability為機關進行部署。Ability可以分為FA(Feature Ability)和PA(Particle Ability)兩種類型,每種類型為開發者提供了不同的模闆,以便實作不同的業務功能。

Gitee 樣例位址

https://gitee.com/openharmony/app_samples/tree/master/ability/ServiceAbility

大家也可以自行下載下傳運作,但需要在OpenHarmony的裝置才能運作。

先來展示一下效果

OpenHarmony之 eTS FA調用 eTS ServiceAbilityOpenHarmony之 eTS FA調用 eTS ServiceAbility

2.代碼講解

└─main
    │  config.json
    │
    ├─ets
    │  ├─MainAbility
    │  │  │  app.ets
    │  │  │
    │  │  ├─component
    │  │  │      OperateView.ets
    │  │  │      TitleBar.ets
    │  │  │
    │  │  ├─model
    │  │  │      ServiceModel.ts
    │  │  │
    │  │  └─pages
    │  │          Index.ets
    │  │
    │  └─ServiceAbility
    │          service.ts
    │
    └─resources
           

PA端

1.ServiceAbility下的service.ts 服務能力類

我們先來看服務端,因為功能是服務端定義的,看它我們就能知道這個服務能力類的核心是實作了一個什麼功能,以及如何定義一個這樣的服務能力類。

對照下面的圖來看,它都做了那些事:

1.引入rpc依賴,

RPC,全稱 Remote Procedure Call(遠端過程調用),即調用遠端計算機上的服務,就像調用本地服務一樣。

2.類命名建議遵循XxxxStub,繼承rpc.RemoteObject類

3.onRemoteRequest函數中,按照業務定義請求碼,實作響應的功能,data為輸入參數,reply為傳回結果,記得傳回true。

4.export的回調函數中,onConnect函數要傳回目前new的執行個體。

OpenHarmony之 eTS FA調用 eTS ServiceAbilityOpenHarmony之 eTS FA調用 eTS ServiceAbility

FA端

1.MainAbility下的ServiceModel.ts 服務子產品

用戶端我們先來看一下 ServiceModel.ts ,注意這個也是一個ts檔案,說明它也是一個class,它主要是調用服務端的服務能力類。

對照圖來看:

1.引入了featureAbility、rpc的依賴

2.定義了rpc對象 mRemote

3.定義了裝置ID,可以支援異地裝置

4.定義了connectService、disconnectService 方法,用于連接配接和斷開服務能力的連接配接

5.定義rpc對象的get方法,用于調用remote方法

6.定義了幾個事件回調函數,包括:onConnectCallback、onDisconnectCallback、onFailedCallback

OpenHarmony之 eTS FA調用 eTS ServiceAbilityOpenHarmony之 eTS FA調用 eTS ServiceAbility

這裡就把connectService 函數展開來看一下

//連接配接的服務
connectService() {
    console.log(`${TAG} onCconnectService begin`)
    connection = featureAbility.connectAbility(
        {
            deviceId: localDeviceId,
            bundleName: 'ohos.samples.etsserviceability',
            abilityName: 'ohos.samples.etsserviceability.ServiceAbility',
        },
        {
            onConnect: this.onConnectCallback,
            onDisconnect: this.onDisconnectCallback,
            onFailed: this.onFailedCallback,
        },
    )
}
           

2.MainAbility下的OperateView.ets 操作視圖UI元件

1.可以學習一下TextArea、Text元件的使用,例如 placeholder、onChange的使用

2.可以學習一下@Link 裝飾器的使用

Prop、Link、Consume、Objectlink 禁止本地初始化。是父元件直接傳過來的。(檢視更多裝飾器)

我們在Index.ets 頁面再看一下是如何使用這個元件的。

@Component
export struct OperateView {
  @Link before: string
  @Link after: string

  build() {
    Column() {
      TextArea({ placeholder: $r('app.string.input_placeholder') })
        .fontSize(22)
        .width('94%')
        .constraintSize({ minHeight: 50 })
        .margin({ top: 10 })
        .onChange((value: string) => {
          this.before = value
        })
      Text(this.after)
        .fontSize(22)
        .width('94%')
        .margin({ top: 10 })
        .constraintSize({ minHeight: 50 })
        .padding(10)
        .border({ width: 1, color: Color.Gray, radius: 20 })
    }
  }
}
           

3.MainAbility下的Index.ets 首頁

Index.ets是這個樣例工程的首頁面,和使用者互動的部分都是在這個頁面展示了,還是對照截圖來看:

1.引入了prompt、rpc 的依賴。prompt是一個資訊提示對話框元件

2.聲明一個serviceModel的執行個體化變量

3.定義了一個async的排序函數,裡面是調用serviceModel提供的字元串排序方法

4.build代碼塊,建構UI元件

OpenHarmony之 eTS FA調用 eTS ServiceAbilityOpenHarmony之 eTS FA調用 eTS ServiceAbility

再來看一下 build 代碼塊的内容:

1.調用OperateView 元件,将排序前後的兩個字元串傳給元件進行顯示,還記得OperateView元件的定義

@Component
export struct OperateView {
  @Link before: string
  @Link after: string
           

2.ForEach 循環建立按鈕元件,包括: 連接配接服務、斷開服務、字元串排序,結合switch 的使用,避免寫很多重複代碼。

OpenHarmony之 eTS FA調用 eTS ServiceAbilityOpenHarmony之 eTS FA調用 eTS ServiceAbility

這個示例就分析完。

3.補充說明

1.為什麼上面講的時候是按照服務端和用戶端分開講呢?

因為鴻蒙應用的最小單元是Ability,也就是是它是可以按照Ability進行拆分然後分發部署的。

2.包含@Link 變量的UI元件,想要預覽怎麼辦?

@Link 修飾的變量禁止本地初始化,不管是加@Entry還是@Preview都還會預覽報錯,如果一定要預覽就把@Link換成其它類型裝飾器,後面記得改回去。

<br>

最後歡迎大家讨論留言.

附件連結:https://ost.51cto.com/resource/1964

繼續閱讀