AbilityStageの概要
HarmonyOSのアプリケーションアーキテクチャにおいて、AbilityStageはモジュール単位のコンポーネント管理を行う中心的な役割を担います。これはAndroidのApplicationクラスやiOSのAppDelegateに類似しており、特定のModule(HAP)内で使用されるすべてのAbility(画面または機能単位)を管理するためのエントリポイントです。
AbilityStageを通じて、開発者は以下のような機能を実装できます:
- ライフサイクル制御:モジュールの初期化および終了時における処理を定義可能。
- ページ間ナビゲーション:複数のAbility間の遷移を統一的に管理。
- インテント処理:wantオブジェクトに基づく起動要求のカスタマイズ。
- グローバル状態の初期化:共有リソースやデータストアのセットアップに利用可能。
各Moduleは1つのAbilityStageのみを持ち、srcEntryフィールドでそのエントリクラスを指定します。
カスタムAbilityStageの実装手順
新しいAbilityStageをプロジェクトに追加するには、以下のステップに従います。
- 対象Moduleの
etsディレクトリ内に「stage」という名前のフォルダを作成します。 - その中にTypeScriptファイル
MainStage.tsを作成します。 - コードエディタでファイルを開き、次のように基底クラスを継承したクラスを定義します。
import AbilityStage from '@ohos.app.ability.AbilityStage';
import Want from '@ohos.app.ability.Want';
export default class MainStage extends AbilityStage {
onCreate(): void {
console.info('MainStage onCreate is called');
// モジュール初回読み込み時の初期化処理
}
onAcceptWant(want: Want): string | undefined {
const abilityName = want?.elementName;
if (abilityName) {
console.debug(`Custom ability tag assigned for ${abilityName}`);
return abilityName;
}
}
}
上記の例では、onCreateメソッドを利用してモジュール起動時にログ出力を行い、初期設定処理を想定しています。また、onAcceptWantは"specified"起動モードでのみ呼び出され、タスクビューに表示されるラベルをカスタマイズするために使用されます。
マニフェストファイルへの登録
作成したクラスを有効にするには、module.json5ファイルにエントリポイントを明示的に記述する必要があります。
{
"module": {
"name": "entry",
"type": "entry",
"srcEntry": "./ets/stage/MainStage.ts",
"abilities": [
{
"name": "MainAbility",
"launchType": "standard"
}
]
}
}
srcEntryプロパティが指すパスは、プロジェクトルートからの相対パスであることに注意してください。正しく設定しないと、ランタイム時にエラーが発生します。
主なコールバックメソッド
| メソッド名 | 説明 |
|---|---|
onCreate() |
モジュール読み込み時に一度だけ呼び出される初期化フック |
onAcceptWant(want: Want) |
specified起動タイプのAbilityが起動された際の表示名返却 |