2012-01-27 34 views
26

Este código ejecutará una aplicación automáticamente después de iniciar el sistema, pero la aplicación se cerrará después de presionar el botón Atrás.¿Cómo ejecutar una aplicación de Android en segundo plano?

Si la aplicación se ejecuta normalmente haciendo clic en su icono. Se ejecutará continuamente incluso después de presionar el botón Atrás o ejecutar otras aplicaciones.

public class AutoBoot extends BroadcastReceiver { 
    @Override   
    public void onReceive(Context context, Intent intent) {     
     Intent i = new Intent(context, MyActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i);   
    } 
} 

Mi pregunta es, ¿cómo hacer que el código de ejecución automática para funcionar de forma continua incluso después de pulsar el botón de retroceso o ejecutar otras aplicaciones?

Respuesta

16

Probablemente pueda iniciar Service aquí si desea que su aplicación se ejecute en segundo plano. Para esto se usa el Servicio en Android: se ejecuta en segundo plano y se realizan operaciones a largo plazo.

UDPATE

Puede utilizar START_STICKY para hacer su servicio en funcionamiento continuo.

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    handleCommand(intent); 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 
+0

¿Cómo se detendrá explícitamente? –

+0

Además, ¿cómo comienzo el servicio después de reiniciar? –

3

Como aplicaciones funcionando en el fondo de todos modos. Supongo que lo que realmente está preguntando es cómo hacer que las aplicaciones hagan cosas en segundo plano. La siguiente solución hará que su aplicación haga cosas en segundo plano después de abrir la aplicación y después de que el sistema se haya reiniciado.

A continuación, he añadido un enlace a un ejemplo completamente de trabajo (en la forma de un proyecto de Android Studio)

Este tema parece estar fuera del alcance de la documentación de Android, y no lo hace parece ser un documento completo sobre esto. La información se distribuye en algunos documentos.

Los siguientes documentos le dicen indirectamente cómo hacer esto: https://developer.android.com/reference/android/app/Service.html

https://developer.android.com/reference/android/content/BroadcastReceiver.html

https://developer.android.com/guide/components/bound-services.html

En aras de conseguir sus requisitos de uso correcto, la parte importante de este documento anterior para leer cuidadosamente es: #Binder, #Messenger y los componentes a continuación:

https://developer.android.com/guide/components/aidl.html

Aquí está el enlace a un ejemplo completamente de trabajo (en formato Estudio Android): http://developersfound.com/BackgroundServiceDemo.zip

Este proyecto se iniciará una actividad que se une a un servicio; implementando el AIDL.

Este proyecto también es útil para volver a factorizar con el propósito de IPC en diferentes aplicaciones.

Este proyecto se desarrolla también para iniciarse automáticamente cuando se reinicia Android (siempre que la aplicación se ha ejecutado al menos una después de la instalación y la aplicación no está instalada en la tarjeta SD)

Cuando esta aplicación/proyecto se ejecuta al reiniciar el sistema, se utiliza dinámicamente una vista transparente para que parezca que ninguna aplicación se ha iniciado pero el servicio de la aplicación asociada se inicia de forma limpia.

Este código está escrito de tal manera que es muy fácil de ajustar para simular un servicio programado.

Este proyecto está desarrollado de acuerdo con los documentos anteriores y, posteriormente, es una solución limpia.

Sin embargo, hay una parte de este proyecto que no es limpia: no he encontrado una manera de iniciar un servicio al reiniciar sin usar una Actividad. Si alguno de ustedes que está leyendo esta publicación tiene una forma clara de hacerlo, publique un comentario.

+0

gracias - Estoy muy interesado en aprender esto. He estado desarrollando aplicaciones de Android en Android Studio durante casi 1 año. Descargué tu archivo comprimido, lo puse en un directorio, abrí ese director en Android Studio y al compilar recibí este error. Error: se produjo un problema al configurar el proyecto ': aplicación'. > No se pudieron resolver todas las dependencias para la configuración ': app: _debugApkCopy'. > No se pudo encontrar com.android.support.constraint: constraint-layout: 1.0.2. Requerido por: proyecto: aplicación –

+0

Supongo que uno de los diseños está utilizando el diseño de restricciones cuando la dependencia del diseño de restricciones no está en su archivo gradle. Si este no es el caso, cambie el diseño de restricciones en su archivo de diseño a un diseño ordinay y si hay propiedades en el diseño relacionadas con el diseño de restricciones, elimínelas también. – user2288580

+0

Cuando salen nuevas versiones gradle, normalmente hay problemas de migración. La mejor forma de lidiar con este problema es crear un nuevo proyecto con el mismo nombre de paquete y migrar los archivos del proyecto por separado. Perdon por el inconveniente. La aplicación fue completamente probada, por lo que funciona. – user2288580

Cuestiones relacionadas