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.