2012-05-10 8 views
5

Estoy trabajando en una aplicación que tiene algunas actividades. Una actividad comienza la siguiente. Para compartir algunos valores, estoy usando una implementación personalizada de la aplicación (estoy hablando de android.app.application) llamada MyApplication.
Como todos sabemos, el sistema Android mata una aplicación, si necesita más espacio. Pero esto lleva a un problema:
El contexto de la aplicación se mata, pero no la actividad

  • abro mi aplicación y utilizarlo como cualquier otra aplicación
  • lo cierro (botón de Inicio) y utilizar otras aplicaciones
  • El sistema va a matar a mi solicitud porque que está perdiendo la memoria
  • Cuando me abro de nuevo mi aplicación, se quiere abrir la última actividad utilicé y me da una fuerza de cierre, ya que los valores en MyApplication son nulos

lo extraño es, que el dest sistema aplica mi aplicación, pero parece que mantiene la actividad. Realmente no entiendo por qué esto es así porque la aplicación no parece tener un ciclo de vida.

Lo que quiero tener:
Cuando se elimina MyApplication (toda la aplicación, no solo la actividad), quiero que también se eliminen las últimas actividades. Así que cuando vuelvo a abrir la aplicación, comienza la actividad principal proporcionada por manifest.xml.
o
Los valores en MyApplication se conservan y no se pierden si la aplicación se destruye. (Estoy hablando de algunos objetos, así que creo que las preferencias compartidas no funcionarán).
No deseo utilizar un servicio para enlazar mis actividades, pero ¿hay alguna manera similar de decirle al sistema que mi última actividad utilizada depende del contexto de la aplicación?

Espero que entiendas cuál es mi problema y alguien me puede ayudar con esto.

+0

me gusta como ninguna de las respuestas parece referirse a su uso de una aplicación personalizada, aunque claramente nota su uso: /). Ha intentado utilizar la aplicación.ActivityLifecycle Callbacks en absoluto, no estoy seguro si eso es lo que está tratando de lograr incluso (parece que podría necesitar la directio inversa). – MikeIsrael

+0

Creo que te estás refiriendo a ** Historia de la pila de actividades **, ¿rito? – waqaslam

+0

Gracias MikeIsrael tienes razón. Las respuestas a continuación no se refieren a mi problema. El uso del ciclo de vida de la actividad es solo una solución. Preferiría que la Aplicación pudiera manejar sus actividades y matarlas si se mata toda la aplicación. El historial de la pila de actividad maneja el comportamiento del botón Back que mi problema. Estoy realmente seguro de que este es un problema de aplicación, no un problema de actividad. – joshplusa

Respuesta

1

La manera correcta de hacer las cosas sería guardar el estado de su aplicación. Reemplace el método onSaveInstanceState (Bundle savedInstanceState) para guardar su estado y onRestoreInstanceState para recuperarlo.

Si necesita ahorrar grandes conjuntos de datos de considerar el uso de una base de datos SQL

+0

Gracias por el Tipp, pero como escribí en mi publicación, esto no funciona para mí. Por lo que yo entendí, no puedo guardar mis propios Objetos en el estado de las aplicaciones. – joshplusa

+0

Entonces mi mejor suposición sería usar una base de datos SQL para guardar sus objetos – Ika

+0

Muy bien. Echaré un vistazo más de cerca cuál es la mejor manera de resolver mi problema. ¡Gracias por la ayuda! – joshplusa

0

Usted debe asegurarse de que la aplicación se cierra y se reinicia la forma en que desea que en los métodos onPause(), onResume() y onStop(). Salida savedInstanceState que puede guardar el estado de la aplicación (y restaurarlo, cuando es enviado como parámetro para onCreate)

+0

Gracias pero hablo de Aplicación no Actividad. – joshplusa

+0

@joshplusa Usted estaba hablando de ambos, y quería que la actividad principal se iniciara al reanudar después de onStops(), ¿verdad? – keyser

+0

Sí. En este momento estoy verificando mis valores en onResume(). Si son nulos, termino la aplicación. Al hacer esto, llegaré a la actividad principal en cualquier momento. Pero está algo sucio Tal vez tengo que echar un vistazo más de cerca y el historial de la pila de actividades. ¡Gracias por la respuesta! – joshplusa

0

En su implementación personalizada de aplicación, añadir una bandera dicen:

public boolean appContextExist = false; 

En su Actividad primera establece el indicador en true,

Anulación onCreate y el método de su actividad, que necesita los contextos onResume, añaden siguiente:

MyApplication myApp = ((MyApplication) getApplicationContext()); 
if (!myApp.appContextExist) { 
    // Code to return to start activity here 
} 
Cuestiones relacionadas