web-dev-qa-db-fra.com

Quand la méthode onCreate () d'Application est-elle appelée?

Dans mon Android, j'ai une classe DefaultApplication qui étend Android.app.Application, Et dans onCreate() je lie certains services qui seront utilisés par mes autres activités dans cette application.

J'ai également un BroadcastReceiver qui écoute et reçoit les messages C2DM. Lorsque ce récepteur reçoit un message lorsque l'application n'est pas en cours d'exécution, il déclenche une boîte de dialogue qui affiche le message à venir et démarre une activité de mon application.

Ma question est la suivante: lorsque je démarre une activité sans aucune interaction avec DefaultApplication, mon DefaultApplicationonCreate() sera-t-il appelé parce qu'une activité de cette application a démarré?

Voici la définition et le manifeste de mon DefaultApplication:

public class DefaultApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        doBindService();

    }

    void doBindService() {

        // Establish a connection with the service. We use an explicit
        // class name because we want a specific service implementation that
        // we know will be running in our own process (and thus won't be
        // supporting component replacement by other applications).

        bindService(new Intent(DefaultApplication.this, SocketService.class),
                socketServiceConnection, Context.BIND_AUTO_CREATE);

        mIsBound = true;
    }

    void doUnbindService() {
        if (mIsBound) {
            // Detach our existing connection.
            unbindService(socketServiceConnection);
            mIsBound = false;
        }
    }
}

Le manifeste ressemble à ceci:

<application Android:icon="@drawable/icon" Android:label="@string/app_name"
        Android:name="com.mypackage.DefaultApplication"
        Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
        Android:debuggable="true">
<service Android:name="com.mypackage.services.SocketService"></service>
<activity Android:name="TestActivity"
            Android:screenOrientation="landscape"></activity>
</application>
51
Yasin YILDIRIM

Seulement la première fois.

Lorsque Activity est démarré et que l'application n'est pas chargée, les deux méthodes onCreate() seront appelées.

Mais pour les démarrages ultérieurs d'Activity, la onCreate() de l'application ne sera pas appelée.

42
Peter Knego

Vous pouvez trouver une réponse officielle lorsque onCreate est appelé ici .

Appelé au démarrage de l'application, avant la création de toute activité, service ou objet récepteur (à l'exception des fournisseurs de contenu). Les implémentations doivent être aussi rapides que possible (par exemple en utilisant l'initialisation paresseuse de l'état) car le temps passé dans cette fonction a un impact direct sur les performances de démarrage de la première activité, service ou récepteur dans un processus. Si vous remplacez cette méthode, assurez-vous d'appeler super.onCreate ().

32

Notez que si un service est défini pour s'exécuter dans un autre processus, par exemple avec Android:process=, la onCreate() de l'application sera à nouveau appelée pour ce processus.

Par exemple, voir la méthode de classe d'application Android onCreate est appelée plusieurs fois

13
Paul Verest