API de cycle de vie des applications

Le cycle de vie d'une application fait référence aux états et transitions par lesquels peut passer une application entre son démarrage et sa fermeture. Le cycle de vie d'une application BlackBerry® est simple : démarrage, exécution, fermeture. En cours d'exécution, la plupart des applications reçoivent et traitent des événements et mettent à jour leur interface utilisateur en conséquence.

Toutes les applications ont une classe d'application dérivée des classes Application ou UiApplication. Si vous souhaitez créer une application avec interface utilisateur, votre application doit étendre UiApplication. Sinon, votre application doit étendre Application.

Démarrage

Une application BlackBerry peut être démarrée de différentes façons :

  • L'utilisateur clique sur une icône sur l'écran d'accueil.
  • Le système démarre automatiquement l'application lorsque le smartphone démarre.
  • Une autre application démarre l'application.
  • Le système démarre l'application à une heure programmée.

En cours d'exécution

Indépendamment de la manière dont une application est démarrée, le gestionnaire d'applications démarre le processus dans lequel l'application s'exécute. La classe ApplicationManager permet aux applications d'interagir avec le gestionnaire d'applications pour exécuter des tâches, y compris :

  • exécuter une application immédiatement ou à une heure donnée ;
  • interagir avec des processus, comme récupérer les ID des applications au premier plan ;
  • envoyer des événements globaux au système.

Le gestionnaire d'applications démarre une application en obtenant un nouveau processus et en exécutant un thread dans ce processus pour appeler l'un des points d'entrée de l'application. Pour de nombreuses applications, la méthode main() de sa classe d'application est le seul point d'entrée appelé. Toutefois, vous pouvez configurer plusieurs points d'entrée pour une même application. Plusieurs points d'entrée permettent aux utilisateurs de démarrer l'application de différentes façons. Par exemple, si votre application permet aux utilisateurs de créer un document, il est possible que vous souhaitiez fournir aux utilisateurs deux icônes permettant de démarrer l'application. Les utilisateurs peuvent alors cliquer sur une icône pour ouvrir l'application dans leur écran d'accueil et sur l'autre icône pour ouvrir l'application dans l'écran requis pour créer un document.

Les descripteurs d'application sont des ensembles de données à propos d'une application. Une application seule peut être associée à plusieurs descripteurs d'application. Une application avec plusieurs points d'entrée dispose d'un descripteur d'application correspondant à chacun de ces points d'entrée. Vous pouvez utiliser la classe ApplicationDescriptor conjointement aux descripteurs d'application.

L'environnement d'exploitation BlackBerry est multi-thread. Il vous permet d'exécuter plusieurs applications simultanément. Il prend en charge des événements de diffusion pour plusieurs applications et threads en cours d'exécution en arrière-plan.

Le thread d'événement est le seul thread qui peut traiter des événements et mettre à jour l'interface utilisateur de l'application. Par conséquent, vous ne devez pas l'utiliser pour exécuter des instructions qui pourraient échouer ou être longues. Si, par exemple, vous devez établir une connexion réseau, vous devez exécuter et utiliser un autre thread.

Il peut vous arriver de vouloir mettre à jour l'interface utilisateur depuis un thread de type autre que d'événement. Vous disposez pour cela de deux méthodes.

  • Vous pouvez utiliser des threads d'arrière-plan pour accéder à l'interface utilisateur en activant un verrouillage d'événement pour une courte durée. Cette option est utile si vous avez besoin d'exécuter une mise à jour de l'interface utilisateur rapide ou urgente. Dans ce cas, vous devez procéder rapidement à la mise à jour de l'interface utilisateur requise et déverrouiller. Sinon, votre application ne répondra plus et pourrait être fermée par le système. Obtenez le verrouillage en appelant Application.getEventLock() sur le thread d'arrière-plan, puis synchronisez cet objet pour sérialiser l'accès à l'interface utilisateur.

  • Vous pouvez ajouter un objet exécutable à la file d'attente d'événements. Cette option est préférable si l'éventualité d'un retard avant l'exécution de la tâche est acceptable. Vous injectez un événement sous forme d'un objet déployant Runnable. L'événement est traité par le thread d'événement lorsqu'il est reçu de la file d'attente des messages. Le thread d'événement traite l'événement en appelant sa méthode run(). Pour injecter des événements exécutables dans la file d'attente des messages de votre application, utilisez la méthode invokeAndWait() ou invokeLater().

Dans les deux cas, vous ne devez pas exécuter de tâche susceptible d'être longue ou de se bloquer. Si vous utilisez des appels de la bibliothèque dans votre tâche, assurez-vous de les comprendre correctement et de ne les utiliser que s'ils sont rapides et ne risquent pas de se bloquer.

Fermeture

Pour fermer une application, vous pouvez appeler System.exit(), qui génère la fermeture de BlackBerry JVM pour mettre fin à tous les processus d'appel et, par conséquent, à tous les threads associés. Vous pouvez également arrêter une application en ôtant le dernier objet Screen de la pile d'affichage, ce qui pousse la méthode close() à appeler System.exit().

Il s'agit d'une bonne méthode de désenregistrement manuel de tout écouteur que vous avez enregistré avant d'arrêter votre application.

Du fait que vous démarrez généralement le thread d'envoi d'événement en appelant Application.enterEventDispatcher(), qui ne s'arrête pas, votre application doit offrir une méthode d'arrêt. Les applications interagissant avec l'utilisateur peuvent proposer un gestionnaire pour un élément de menu Close et les applications sans interaction avec l'utilisateur peuvent s'arrêter par le traitement d'un événement système sur lequel repose leur exécution.

Plus d'informations à propos du cycle de vie d'une application

Sujet précédent: Présentation de Java SDK

Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.