Hola compañeros y gracias de antemano:
Hace tiempo que llevo desarrollando una aplicación móvil en java para Android para una empresa. El caso es que la aplicación tiene que pasar de segundo plano al frente de vez en cuando como todas las aplicaciones del mundo, como cuando te llaman o miras el correo, haces una foto, etc y luego vuelves a la aplicación en la que estabas.
Al ser esta la primera vez que desarrollo una aplicación como esta no he tenido en cuenta el ciclo de vida de la aplicación y estoy intentando corregirlo ya que a mucha gente le sucede que al traer de vuelta la aplicación después de hablar por teléfono, falla y se le cierra de golpe con la consecuente pérdida de datos.
En los últimos días he estado viendo muchos ejemplos sobre como funciona el ciclo de vida: onPause(), onResume(), onRestart() y demás, pero mi problema es que no se como manejar los datos de mi aplicación en esos casos. Voy a explicar un poco como manejo los datos de mi aplicación mientras la aplicación está activa:
En la pantalla principal leo un archivo XML con una lista de tareas y me creo un ArrayList de mi clase ParteTrabajo (clase con métodos y variables que necesito) con todas las que haya en el fichero XML, el usuario elige una y con esa se mueve por la aplicación. Para controlar todos los cambios que se hacen en las diferentes actividades lo que hago es crear una instancia de mi lista y sacar de ahí la tarea seleccionada por el usuario, utilizo mi clase para almacenar los datos y la vuelvo a meter en la lista si se han hecho cambios.
Pongo un ejemplo de actividad por si queda más claro:
El caso es que en los ejemplos que he visto sólo muestran el ciclo de vida y no cómo tratar los datos de la aplicación, al manejar una instancia de mi lista no se si tengo que utilizar el bundle, que datos guardar o si tengo que recuperar también la asignación de valores de la interfaz.
Ayer conseguí que me saliera un nullpointerexception al traer de vuelta la aplicación desde segundo plano después de 20 minutos con el móvil inactivo y lo hizo en Instanciar(), fue en otra actividad más amplia en la que probé onResume if(parte==null) Instanciar(); pensando que si volvía y la actividad había borrado los datos, que los recuperara en Instanciar() como si se creara de nuevo, pero nada.
Agradezco muchísimo cualquier ayuda posible al respecto sobre pasar tareas de segundo plano al frente, y lamento no poder poner un log ya que es algo que pasa a los usuarios que están por ahí y no puedo conectar los móviles para ver sus trazas. Seguiré probando a ver si consigo que vuelva a fallar, gracias de nuevo.
Edit: Mientras escribía esto he tenido la aplicación en segundo plano y pasando de aplicaciones y al volver me ha fallado. Aquí está el log:
07-03 11:01:09.639: E/InputDispatcher(299): channel '41835cf8 com.example.tankatinformes/com.example.tankatinformes.ParteTrabajoFotos (server)' ~ Channel is unrecoverably broken and will be disposed!
07-03 11:01:10.879: E/AndroidRuntime(22496): FATAL EXCEPTION: main
07-03 11:01:10.879: E/AndroidRuntime(22496): java.lang.RuntimeException: Unable to resume activity {com.example.tankatinformes/com.example.tankatinformes.ParteTrabajoFotos}: java.lang.NullPointerException
07-03 11:01:10.879: E/AndroidRuntime(22496): at com.example.tankatinformes.ParteTrabajoFotos.onResume(ParteTrabajoFotos.java:60)
07-03 11:01:10.879: E/AndroidRuntime(22496): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154)