2011-08-26 33 views
13

Quiero iniciar un servicio cuando mi aplicación se inicializa desde cualquier componente.¿Puedo iniciar Service desde Application # onCreate()?

public class MyApplication extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     startService(new Intent(getApplicationContext(), MyService.class)); 
    } 
} 

¿El servicio está disponible en el estado onCreate()? ¿El super.onCreate() inicializará todos los componentes de una Aplicación registrada en AndroidManifest.xml?

Puedo ejecutar este código en mi galaxy s, pero no puedo asegurarme de que se ejecutará en todos los dispositivos y plataformas, no puedo encontrar ninguna documentación sobre la inicialización de una APLICACIÓN de Android.

+0

En este caso ¿Cómo podemos recuperar el objeto de servicio en la aplicación ... y desde donde se llama a onBind? – aProgrammer

Respuesta

8

Sí, puede iniciar un servicio en onCreate() de la manera en que lo hace. Sin embargo, no hay garantía de que el servicio se inicie con éxito; siempre que el servicio exista en el dispositivo y pueda ejecutarse, lo hará. super.onCreate() no hace ninguna preparación que se requiere para iniciar un servicio desde dentro de su aplicación. ¿A qué te refieres con "¿Está el servicio disponible en el estado onCreate()"?

+0

El servicio es de mi aplicación, por lo que existe sin dudas. Por "¿Está el servicio disponible en el estado onCreate()", me refiero a si el servicio está listo para iniciarse en Application # onCreate() (no Activity # onCreate()). –

+1

El servicio estará listo para comenzar. onCreate no necesita ejecutarse antes de que el Servicio esté disponible para iniciarse (es decir, onCreate no carga la clase necesaria para cargar un Servicio desde su aplicación). –

0

En resumen Sí, el Context.startService() pero el documento también dice que si devuelve un valor nulo, el servicio no estará disponible.

Si el servicio se está iniciando o ya se está ejecutando, se devuelve ComponentName del servicio real que se inició; otra cosa si el servicio no existe se devuelve nulo

Esta API no está destinado a variar entre los dispositivos para que pueda estar seguro de lo que está experimentando en el emulador y los dispositivos que tiene. La advertencia es recordar que los servicios que requieren "muchos" recursos pueden actuar de manera diferente, es decir, tiempo de CPU o memoria, etc.

Cuestiones relacionadas