2011-10-07 26 views
43

En mi aplicación de Android, tengo una clase DefaultApplication que se extiende android.app.Application, y en su onCreate() Ato algunos servicios que serán utilizados por mis otras actividades en esta aplicación.¿Cuándo se llama al método onCreate() de la aplicación?

También tengo un BroadcastReceiver que escucha y recibe mensajes C2DM. Cuando este receptor recibe un mensaje cuando la aplicación no se está ejecutando, activará un cuadro de diálogo que muestra el próximo mensaje y comenzará una Actividad de mi aplicación.

Mi pregunta es, cuando empiezo una actividad sin ninguna interacción con DefaultApplication, ¿se llamará a DefaultApplicationonCreate() porque se ha iniciado una actividad de esa aplicación?

Estas son la definición y el Manifiesto de mi 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; 
     } 
    } 
} 

Manifiesto se ve así:

<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> 
+1

sí, funciona esto, no he visto otra cosa ... – atasoyh

+0

yo no unserstand qué extiendes 'Application'? ¿No deberías extender 'Activity'? – Caner

+0

@LAS_VEGAS En el resto de mi DefaultApplication, almaceno algunos datos y defino algunos métodos que se usan en toda la aplicación. Copié solo una parte de aquí. –

Respuesta

40

Solo la primera vez.

Cuando se inicia la actividad y no se carga la aplicación, se invocarán los dos métodos onCreate().

Pero para los siguientes inicios de actividad, no se llamará a la aplicación onCreate().

+0

No es estrictamente cierto. [La respuesta de Paul explica un poco más, incluyendo un enlace útil.] (Http://stackoverflow.com/a/28498115/383414) –

28

Usted puede encontrar una respuesta oficial cuando onCreate se llama here.

Se invoca cuando la aplicación se inicia, antes de que se haya creado cualquier actividad, servicio, u objetos del receptor (excluidos los proveedores de contenido). Las implementaciones deben realizarse lo más rápido posible (por ejemplo, mediante la inicialización de estado ) ya que el tiempo empleado en esta función afecta directamente el rendimiento de iniciar la primera actividad, el servicio o el receptor en un proceso. Si anula este método, sea , asegúrese de llamar a super.onCreate().

Cuestiones relacionadas