APIs de ciclo de vida do aplicativo

O ciclo de vida de um aplicativo refere-se aos possíveis estados e transições pelos quais um aplicativo pode passar do momento em que é iniciado até o momento em que é encerrado. O ciclo de vida de um aplicativo BlackBerry® é direto: é iniciado, executado e encerrado. Durante o estado de execução, a maioria dos aplicativos recebe e processa eventos e atualiza sua UI apropriadamente.

Todos os aplicativos têm uma classe de aplicativo derivada de Application ou UiApplication. Se desejar um aplicativo com uma UI, seu aplicativo deverá estender UiApplication. Caso contrário, seu aplicativo deverá estender Application.

Iniciando

Um aplicativo BlackBerry pode ser iniciado de várias maneiras:

  • Um usuário clica em um ícone na tela inicial.
  • O sistema automaticamente inicia o aplicativo quando o smartphone é iniciado.
  • Outro aplicativo inicia o aplicativo.
  • O sistema inicia o aplicativo em um tempo programado.

Em execução

Independentemente de como um aplicativo é iniciado, o Gerenciador de aplicativos é responsável por iniciar o processo no qual o aplicativo é executado. A classe ApplicationManager permite que os aplicativos interajam com o Gerenciador de aplicativos para executar tarefas, incluindo:

  • Executar um aplicativo imediatamente ou em um momento específico.
  • Interagir com processos, incluindo recuperar IDs para aplicativos em primeiro plano.
  • Publicar eventos globais no sistema.

O Gerenciador de aplicativos inicia um aplicativo recebendo um novo processo e criando um thread dentro desse processo para chamar um dos pontos de entrada do aplicativo. Para muitos aplicativos, o método main() de sua classe de aplicativo é o único ponto de entrada que é chamado. No entanto, você pode configurar mais de um ponto de entrada para um aplicativo. Vários pontos de entrada permitem que os usuários iniciem o aplicativo de diferentes maneiras. Por exemplo, se o seu aplicativo permitir que os usuários criem um novo documento, talvez você deseje fornecer aos usuários dois ícones que eles possam clicar para iniciar o aplicativo. Os usuários podem clicar em um ícone para abrir o aplicativo em sua tela inicial e no outro ícone para abrir o aplicativo na tela necessária para criar um novo documento.

Descritores de aplicativos são conjuntos de dados sobre um aplicativo. Um único aplicativo pode ter mais de um descritor de aplicativo associado. Um aplicativo que tem vários pontos de entrada tem um descritor de aplicativo correspondente a cada um desses pontos de entrada. Você pode usar a classe ApplicationDescriptor para trabalhar com descritores de aplicativos.

O ambiente operacional do BlackBerry é multi-thread. Ele permite executar vários aplicativos simultaneamente. Ele suporta eventos de transmissão a vários aplicativos e threads em segundo plano em execução.

O thread de evento é o único thread que pode processar eventos e atualizar a UI do aplicativo, portanto, você não deve usá-lo para executar instruções que podem falhar ou demorar muito tempo para ser concluídas. Se, por exemplo, você precisar estabelecer uma conexão de rede, deverá criar e usar outro thread.

Você pode encontrar situações nas quais deseja atualizar a UI a partir de um thread sem eventos. Há duas maneiras de fazer isso:

  • Você pode usar threads em segundo plano para acessar a UI adquirindo a trava de evento por um tempo curto. Esta opção é útil se você deve executar uma atualização de UI rápida ou urgente. Neste caso, você deve executar rapidamente a atualização de UI necessária e liberar a trava. Caso contrário, seu aplicativo não responderá e poderá, eventualmente, ser encerrado pelo sistema. Você adquire a trava de evento chamando Application.getEventLock() no thread em segundo plano e depois sincroniza este objeto para serializar o acesso à UI.

  • Você pode adicionar um objeto executável à fila de eventos. Esta opção é a preferencial quando é aceitável enfrentar uma atraso antes que sua tarefa seja executada. Você injeta um evento na forma de um objeto que implementa Runnable. O evento é manipulado pelo thread de evento como é recebido da fila de mensagens. O thread de evento processa o evento chamando seu método run(). Para injetar eventos executáveis na fila de mensagens de seu aplicativo, use o método invokeAndWait() ou o método invokeLater().

Em qualquer um dos casos, você não deve executar tarefas que possam demorar muito tempo para ser concluídas ou que possam ser travadas. Se você usar chamadas de biblioteca dentro de sua tarefa, certifique-se de entendê-las bem e usá-las apenas se forem concluídas rapidamente e não forem travadas.

Como encerrar

Uma maneira de encerrar um aplicativo é chamar System.exit(), que faz com que o BlackBerry JVM encerre todos os processos do chamador e, como resultado, todos os threads associados. Como alternativa, você pode encerrar um aplicativo movendo rapidamente a última tela da pilha de exibição, o que faz com que o método close() faça uma chamada para System.exit().

É recomendado cancelar manualmente o registro de todos os ouvintes que você registrou antes de encerrar seu aplicativo.

Como você, geralmente, iniciará o thread do dispatcher de evento chamando Application.enterEventDispatcher(), que não é encerrado, seu aplicativo deverá fornecer uma maneira de encerrar. Os aplicativos que interagem com o usuário podem fornecer um manipulador para um item de menu Close e os aplicativos que não interagem com o usuário podem ser encerrados ao manipular algum evento de sistema que representa sua razão de existência.

Mais informações sobre o ciclo de vida do aplicativo

Próximo tópico: API de UI
Tópico anterior: Apresentando o Java SDK

Estas informações foram úteis? Gostaríamos de receber seus comentários.