182 votes

Pourquoi étendre la classe Android Application ?

Une extension Application peut déclarer des variables globales. Y a-t-il d'autres raisons ?

67voto

wtsang02 Points 6993

La classe d'application est l'objet qui a le cycle de vie complet de votre application. Il s'agit de la couche la plus élevée de l'application :

  • Vous pouvez ajouter ce dont vous avez besoin lorsque l'application est lancée en surchargeant onCreate dans la classe Application.

  • stocker des variables globales qui sautent d'une activité à l'autre. Comme Asynctask.

    etc.

35voto

IntelliJ Amiya Points 672

Parfois, vous voulez stocker des données, comme des variables globales auxquelles on doit accéder à partir de plusieurs activités - parfois partout dans l'application. Dans ce cas, l'objet Application vous sera utile.

Par exemple, si vous voulez obtenir les données d'authentification de base pour chaque http vous pouvez implémenter les méthodes pour les données d'authentification dans l'objet d'application.

Après cela, vous pouvez obtenir le nom d'utilisateur et le mot de passe dans n'importe quelle activité comme celle-ci :

MyApplication mApplication = (MyApplication)getApplicationContext();
String username = mApplication.getUsername();
String password = mApplication.getPassword();

Et enfin, n'oubliez pas d'utiliser l'objet Application comme un objet singleton :

public class MyApplication extends Application {
    private static MyApplication singleton;

    public MyApplication getInstance(){
        return singleton;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        singleton = this;
    }
}

Pour plus d'informations, veuillez cliquer sur Classe d'application

33voto

Joe Malin Points 6290

Au pied levé, je ne vois pas de scénario réel dans lequel l'extension de l'application est préférable à une autre approche ou nécessaire pour accomplir quelque chose. Si vous avez un objet coûteux et fréquemment utilisé, vous pouvez l'initialiser dans un IntentService lorsque vous détectez que l'objet n'est pas actuellement présent. L'application elle-même s'exécute sur le thread de l'interface utilisateur, tandis que l'IntentService s'exécute sur son propre thread.

Je préfère passer les données d'une activité à l'autre avec des intentions explicites, ou utiliser des préférences partagées. Il existe également des moyens de transmettre des données d'un fragment à son activité mère en utilisant des interfaces.

10voto

Jon F Hancock Points 1698

La classe Application est un singleton auquel vous pouvez accéder depuis n'importe quelle activité ou n'importe quel autre endroit où vous avez un objet Contexte.

Vous obtenez également un peu de cycle de vie.

Vous pouvez utiliser la méthode onCreate de l'application pour instancier des objets coûteux, mais fréquemment utilisés, comme une aide à l'analyse. Vous pouvez ensuite accéder à ces objets et les utiliser partout.

5voto

Daniel F. Points 836

Ce n'est pas une réponse mais une observation Il faut garder à l'esprit que les données de l'objet d'application étendu ne doivent pas être liées à une instance d'une activité, comme le montre l'exemple suivant il est possible que vous ayez deux instances de la même activité en cours d'exécution au même moment (une au premier plan et une autre non visible). .

Par exemple, vous lancez votre activité normalement par le biais du lanceur, puis vous la "minimisez". Vous lancez ensuite une autre application (par exemple Tasker) qui démarre une autre instance de votre activité, par exemple pour créer un raccourci, car votre application prend en charge Android.intent.action.CREATE_SHORTCUT. Si le raccourci est alors créé et que l'invocation de l'activité créant le raccourci a modifié les données de l'objet d'application, l'activité s'exécutant en arrière-plan commencera à utiliser cet objet d'application modifié dès qu'elle sera ramenée au premier plan.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X