2012-07-24 15 views
11

Cuando mi aplicación está inactiva, Android mata el proceso. Si el usuario vuelve a abrir la aplicación después de un tiempo, solo se crea la Actividad superior: este es un problema para mí porque la actividad depende de la inicialización de otros objetos (que ahora se destruyen).Reiniciando la aplicación de Android después de que se mate el proceso

Lo que quiero hacer en ese caso es volver a ejecutar la aplicación. ¿Cómo puedo hacer eso?

+0

Android mata a una aplicación para liberar memoria. Entonces, si la aplicación está inactiva, es probable que se elimine después de algún tiempo cuando el sistema operativo necesita memoria para ejecutar otros programas. – gkris

+0

Quizás necesite un servicio en segundo plano para mantener su _vital_ _objects_ en ejecución. Puede usar un "Intento persistente" para asegurarse de que el servicio se reinicie cuando muera. – DroidBender

Respuesta

0

Probablemente deberías estar buscando almacenar dichos Objetos en la implementación de tu aplicación de la clase Application.

Si estos objetos contienen un estado que debe ser más persistente, debe guardar el estado de dichos Objetos en el método onPause() de cada actividad, ya sea en la base de datos, en SharedPreferences o de forma remota.

+6

, incluso si los mantienes en la clase 'Application', después de que 'Android' mata el proceso, los objetos se perderán y tu no comenzará con la" actividad de inicialización ", sino con la última visible. –

7

Sólo identificar que se está lanzando su Application después de haber sido previamente destruida por Android, se puede hacer esto manteniendo una variable en una clase personalizada Application, y la puso a true después de su applicaiton se inicializa. Así que cuando se re-lanzó el applicaction, esta bandera es falsa, y luego simplemente crea un Intent para lanzar su principal Activity especificando FLAG_ACTIVITY_CLEAR_TOP:

Intent reLaunchMain=new Intent(this,MainActivity.class); 
reLaunchMain.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(reLaunchMain); 
+0

¿dónde debería poner este código? Se bloquea si lo hago en onCreate of the activity –

+0

¿qué excepción obtienes? deberías llamar a esto cuando ahora que Android reinicie tu aplicación. –

+0

@OvidiuLatcu hola, ¿el objeto Aplicación se recrea cuando la actividad en la que se encontraba (y se recrea) no es el iniciador? Tengo que preguntar esto porque no puedo conectar el depurador en el momento en que se recrea la actividad. Tks –

0

Creo que esta respuesta sólo para ti.

Después de terminar la llamada progreso este

 finish(); 
     Intent intent = new Intent(this, sameactivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
Cuestiones relacionadas