Modelo Stage do HarmonyOS: AbilityStage, Context e Want

AbilityStage

AbilityStage é um contêiner de componentes no nível do módulo. Quando um HAP do aplicativo é carregado pela primeira vez, uma instância de AbilityStage é criada, permitindo operações de inicialização para o módulo. Há uma correspondência um-para-um entre AbilityStage e módulo, ou seja, cada módulo possui seu próprio AbilityStage.

Configuração

No arquivo module.json5, o AbilityStage é especificado através do campo srcEntry:

{
  "module": {
    "name": "entry",
    "type": "entry",
    "srcEntry": "./ets/meuabilitystage/MeuAbilityStage.ts"
  }
}

Implementação

Crie uma classe que herda de AbilityStage e sobrescreva métodos do ciclo de vida:

import AbilityStage from '@ohos.app.ability.AbilityStage';

export default class MeuAbilityStage extends AbilityStage {
  onCreate() {
    // Inicialização do módulo quando o primeiro UIAbility é carregado.
  }
  onAcceptWant(want) {
    // Acionado apenas no modo specified.
    return "MeuAbilityStage";
  }
  onConfigurationUpdated() {
    // Tratamento de mudanças globais de configuração.
  }
  onMemoryLevel() {
    // Resposta a ajustes de memória do sistema.
  }
}

O método onCreate() é chamado antes do carregamento da primeira instância de UIAbility no módulo, ideal para inicializações como pré-carregamento de recursos ou criação de threads. onAcceptWant() lida com o modo specified de UIAbility. Os outros métodos respondem a eventos de configuração e memória do sistema.

Context

O Context no HarmonyOS é semelhante ao Context no Android, fornecendo acesso a recursos e serviços do aplicativo. Ele permite operações como obter informações do aplicativo ou iniciar componentes, atuando como uma ponte entre o componente e o ambiente do sistema.

Want

Want é um mecanismo para transferência de informações entre componentes do aplicativo, frequentemente usado como parâmetro em startAbility(). Ele contém dados como bundleName e abilityName para identificar o componente de destino, similar ao Bundle no Android.

Regras Explícitas e Implícitas

Um Want pode incluir campos como deviceId, bundleName, moduleName, abilityName, uri, type, action, entities, flags e parameters. Se abilityName for especificado, é uma regra explícita; caso contrário, é implícita, baseada em correspondência como expressões regulares.

Ação e Entidades

Ação: Define a operação genérica, como ACTION_HOME para iniciar a entrada principal ou ACTION_VIEW_DATA para visualizar dados.

Entidades: Categorizam o componente alvo, complementando a ação em regras implícitas. Por exemplo, ENTITY_BROWSABLE indica um navegador.

Exemplos de Uso

1. Navegação Explícita

import common from '@ohos.app.ability.common';

async function iniciarHabilidadeExplícita() {
  try {
    const desejo = {
      deviceId: "",
      bundleName: "com.exemplo.meuapp",
      abilityName: "habilidadeAlvo"
    };
    const ctx = getContext(this) as common.UIAbilityContext;
    await ctx.startAbility(desejo);
    console.info("Início explícito bem-sucedido");
  } catch (erro) {
    console.info(`Falha no início explícito: ${erro.code}`);
  }
}

O uso de async e await é necessário porque startAbility é uma operação assíncrona; await garante que a execução aguarde a conclusão.

2. Navegação Implícita

No arquivo de configuração do componente alvo (module.json5), defina skills:

"skills": [
  {
    "entities": ["entity.system.browsable"],
    "actions": ["ohos.want.action.viewData"],
    "uris": [
      {
        "scheme": "https",
        "host": "www.exemplo.com",
        "port": "8080",
        "pathStartWith": "consulta",
        "type": "text/*"
      }
    ]
  }
]

No código do chamador, crie um Want com campos de correspondência:

async function iniciarHabilidadeImplícita() {
  try {
    const desejo = {
      action: "ohos.want.action.viewData",
      entities: ["entity.system.browsable"],
      uri: "https://www.exemplo.com:8080/consulta/aluno",
      type: "text/plain"
    };
    const ctx = getContext(this) as common.UIAbilityContext;
    await ctx.startAbility(desejo);
    console.info("Início implícito bem-sucedido");
  } catch (erro) {
    console.info(`Falha no início implícito: ${erro.code}`);
  }
}

A correspondência segue a cadeia ação → entidades → uris → tipo, exigindo que cada etapa seja satisfeita antes da próxima.

Tags: HarmonyOS Stage Model AbilityStage Context Want

Publicado em 6-11 19:26 por Thomas