usando onResume y onPause

Supongamos que tengo dos actividades, actividad1 y actividad2. Quiero navegar de activity1 a activity2, conseguir una cierta información de activity2 e insertarla de nuevo a activity1 y también no quiero perder el estado anterior de activity1 como dejé. ¿cómo puedo salvar su estado?

lo que está describiendo es la razón clásica perfecta para utilizar el método Activity.startActivityForResult() .

esto lo que google escribió en este método de documentación:

Inicie una actividad para la que desea un resultado cuando termine. Cuando salga esta actividad, su método onActivityResult () será llamado con el requestCode dado

así que lo que debes hacer es: desde tu activity1 iniciar la actividad de result, y de activity2 usar el setResult(int resultCode, Intent data) con los datos que quieres que tu activity1 devuelva y call finish() to onActivityResult() en el mismo estado activity1 fue antes ..).

onSaveInstanceState(Bundle) en activity1 para guardar los datos que desee y, a continuación, onRestoreInstanceState(Bundle) en la misma actividad para recuperar los valores. Usando Bundle , puede almacenar casi todos los datos que desee. Recomiendo algo como esto:

 public class MainActivity extends Activity { ... public static final String DATA1_KEY = "data1"; private boolean value1; ... @Override protected void onSaveInstanceState (Bundle outState) { outState.putBoolean(DATA1_KEY, value1); } @Override protected void onRestoreInstanceState (Bundle savedInstanceState) { value1 = savedInstanceState.getBoolean(DATA1_KEY); } } 

Debe anular onSaveInstanceState(Bundle savedInstanceState)

Por favor, compruebe esta respuesta por ejemplo código

O use SharedPreferences . Compruebe este código

Si desea mantener sus datos vivos sólo en tiempo de ejecución, considere el uso de miembros estáticos. A continuación, puede acceder y manipular a estos miembros de cualquier actividad. por ejemplo:

 public class FirstActivity extends Activity { public static String data = null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(...); data = "This is a test!"; } } 

Desde tu segunda actividad puedes acceder a estas variables estáticas como

 public class SecondActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(...); if(FirstActivity.data!=null) { //You can use it: System.out.println(FirstActivity.data); } } } 

Por supuesto, puede agregar funciones getter / setter para hacerlo más seguro y más elegante.

Si desea almacenarlos durante más tiempo, considere utilizar:

  • Preferencias compartidas
  • SQLite
  • o almacenar sus datos en una base de datos en línea.

El usuario realiza una acción en su aplicación que inicia una nueva actividad. La actividad actual se detiene cuando se crea la segunda actividad. Si el usuario presiona el botón Atrás, se reinicia la primera actividad.

Cuando se detiene la actividad, el objeto Activity se mantiene residente en la memoria y se recupera cuando se reanuda la actividad. No es necesario volver a inicializar los componentes que se crearon durante cualquiera de los métodos de devolución de llamada antes del estado Reanudado. El sistema también realiza un seguimiento del estado actual de cada vista en el diseño, por lo que si el usuario introdujo texto en un widget EditText, ese contenido se conserva para que no sea necesario guardarlo ni restaurarlo.

Nota : Incluso si el sistema destruye su actividad mientras está detenido, aún conserva el estado de los objetos Ver (como texto en un EditText) en un Bundle (un bloque de pares clave-valor) y los restaura si el usuario vuelve a navegar a la misma instancia de la actividad.
CommonsWare aquí dice:

Cuando el usuario "presiona el botón ATRÁS", entonces el paquete de onSaveInstanceState () (si lo hay) se descarta, ya que el usuario ha indicado que han terminado con la actividad. El paquete onSaveInstanceState () se utiliza en los casos en que el usuario no ha dicho que han terminado con la actividad (por ejemplo, aceptaron una llamada telefónica entrante), pero Android elige destruir la actividad para liberar RAM.

Y la documentación dice:

Tenga en cuenta que es importante guardar los datos persistentes en onPause () en lugar de onSaveInstanceState (Bundle) porque el último no forma parte de las devoluciones de llamada del ciclo de vida, por lo que no se llamará en todas las situaciones descritas en su documentación.

En otras palabras, ponga su código de guardar / restaurar para objetos no Ver en onPause () y onResume () en lugar de onSaveInstanceState (Bundle) y onRestoreInstanceState (Bundle). Finalmente, supongo que no necesitas guardar ningún estado si solo tienes objetos View y si tienes otros estados puedes usar preferences , file o sqlite para guardarlos en onPause() y onResume() en onResume() .

Puede ver más detalles en estas páginas:
Detención y reinicio de una actividad
Estado de la actividad de almacenamiento en Android
Android no guardará el estado actual de una actividad

  • Determine la razón de la pausa de Android
  • Fragmento onResume () & onPause () no se llama en backstack
  • Error en el administrador de descargas android
  • Ciclo de vida de la actividad de Android: ¿para qué sirven todos estos métodos?
  • Cómo reanudar MediaPlayer en Android después de presionar el botón de inicio y volver a abrir la aplicación
  • ¿Por qué onResume método de un fragmento nunca se disparó después de despedir un DialogFragment que se inició desde el fragmento?
  • OnDestroy se llama cada vez que se enciende la pantalla
  • ¿Qué es la actividad inactiva y por qué se llama después del inicio de la aplicación?
  • Android: "Nivel de aplicación" Pausa y reanudar
  • Android - guardar / restaurar estado de fragmento
  • Aplicación de Android / Actividad para empezar de nuevo Completamente cada vez que empieza o se reanuda?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.