What's onCreate (Paquete guardadoInstanceState)

122

¿Alguien puede ayudarme a saber acerca Bundle savedInstanceStatede onCreate(Bundle savedInstanceState)que soy un novato en Android? Trato de entenderlo desde developer.android.com. Pero no puedo entender. ¿Alguien puede simplificarlo?

usuario1077015
fuente
2
Este es un buen video: youtube.com/watch?v=kkYIMZw9gzQ
Francisco Corrales Morales

Respuestas:

106

Si guarda el estado de la aplicación en un paquete (por lo general, datos dinámicos no persistentes onSaveInstanceState), puede pasar de nuevo a onCreatesi la actividad necesita ser recreada (por ejemplo, cambio de orientación) para que no pierda esto antes información. Si no se proporcionaron datos, savedInstanceStatees nulo.

... debe usar el método onPause () para escribir cualquier dato persistente (como las ediciones del usuario) en el almacenamiento. Además, se llama al método onSaveInstanceState (Bundle) antes de colocar la actividad en dicho estado de fondo, lo que le permite guardar cualquier estado de instancia dinámica en su actividad en el Bundle dado, para luego ser recibido en onCreate (Bundle) si la actividad necesita ser recreado. Consulte la sección Ciclo de vida del proceso para obtener más información sobre cómo el ciclo de vida de un proceso está vinculado a las actividades que aloja. Tenga en cuenta que es importante guardar datos persistentes en onPause () en lugar de onSaveInstanceState (Bundle) porque este último no es parte de las devoluciones de llamada del ciclo de vida, por lo que no se llamará en todas las situaciones como se describe en su documentación.

fuente

Dhruv Gairola
fuente
2
¿otras actividades comparten el mismo paquete? Si comienzo otra actividad, ¿pasa el paquete del primero?
Francisco Corrales Morales
17

onCreate(Bundle savedInstanceState)Obtendrá el Bundlevalor nulo cuando la actividad comience por primera vez y se usará cuando se cambie la orientación de la actividad .......

http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html

Android proporciona otra forma elegante de lograr esto. Para lograr esto, tenemos que anular un método llamado onSaveInstanceState(). La plataforma Android permite a los usuarios guardar cualquier estado de instancia. El estado de la instancia se puede guardar en el paquete. El paquete se pasa como argumento al método onSaveInstanceState.

podemos cargar el estado de la instancia guardada del paquete pasado como argumento al onCreatemétodo. También podemos cargar el estado de la instancia guardada en el onRestoreInstanceStatemétodo. Pero lo dejaré para que los lectores lo descubran.

Dheeresh Singh
fuente
11
savedInstanceStateserá non- nullsi onSavedInstanceState()se llamó previamente. los cambios de orientación son solo un ejemplo en el que esto puede ocurrir.
Alex Lockwood
1
@ AlexLockwood, estoy tratando de pensar en todas las situaciones en que esto podría ocurrir. ¿Hay alguna documentación? Una instancia en la que puedo pensar es si el usuario cambia de aplicación y regresa, pero la actividad ha sido destruida por recuperar recursos. En este caso, Android volverá a crear la actividad con un paquete si se reemplazó onSaveInsanceState (), ¿verdad?
Batbrat
1
@batbrat Sí ... el comentario que hice (hace casi dos años) no es del todo correcto. Supongo que la mejor manera de decirlo es que el Bundleargumento onCreate(Bundle)será non- nullif y solo si Activitytenía el onSaveInstanceStatemétodo llamado anteriormente. Esto sucede durante los cambios de orientación ... y también ocurre cuando la actividad regresa después de ser eliminada por el sistema operativo y cuando se activa cualquier otro cambio de configuración de interés en su dispositivo.
Alex Lockwood
Gracias por la aclaración Alex. Es bueno tener algo de claridad sobre el tema. Me había olvidado de los cambios de configuración distintos de los interruptores de orientación en particular.
Batbrat
15

Como respondió Dhruv Gairola, puede guardar el estado de la aplicación utilizando Bundle savedInstanceState. Estoy tratando de dar un ejemplo muy simple que los nuevos alumnos como yo puedan entender fácilmente.

Supongamos que tiene un fragmento simple con TextView y Button. Cada vez que hace clic en el botón, el texto cambia. Ahora, cambie la orientación de su dispositivo / emulador y observe que perdió los datos (es decir, los datos modificados después de hacer clic) y el fragmento comienza como la primera vez. Al usar Bundle savedInstanceState podemos deshacernos de esto. Si echas un vistazo al ciclo de vida del fragmento. Fragment Lifecylce obtendrá que se llama a un método "onSaveInstanceState" cuando el fragmento está a punto de destruirse.

Entonces, podemos guardar el estado significa que el valor de texto modificado en ese paquete como este

 int counter  = 0;
 @Override
 public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("value",counter);
 }

Después de hacer la orientación, se llamará al método "onCreate", ¿verdad? para que podamos hacer esto

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState == null){
        //it is the first time the fragment is being called
        counter = 0;
    }else{
        //not the first time so we will check SavedInstanceState bundle
        counter = savedInstanceState.getInt("value",0); //here zero is the default value
    }
}

Ahora, no perderá su valor después de la orientación. El valor modificado siempre se mostrará.

Asad
fuente
Tenga en cuenta que esto también es cierto en la actividad. ¿Puedes explicar más sobre la diferencia de (Paquete de actividad) y Paquete de fragmento?
laalaguer
Puede obtener una comprensión clara de los ciclos de vida de la actividad y el fragmento donde una actividad puede mostrar múltiples fragmentos a la vez. Entonces, la diferencia básica es que es posible que desee guardar algunos valores para todos los fragmentos de una actividad, entonces usted use el paquete de actividades; de lo contrario, debe usar el paquete de fragmentos si es para un fragmento específico.
Asad
5

Función onCreate (Bundle savedInstanceState) en Android:

1) Cuando una actividad llama o se inicia por primera vez, el método onCreate (Bundle savedInstanceState) es responsable de crear la actividad.

2) Cuando alguna vez se cambia la orientación (es decir, de horizontal a vertical o vertical a horizontal) de la actividad o cuando una Actividad se termina de forma forzada por cualquier Sistema Operativo y luego se guarda el Estado de la Entrada, es decir, el objeto de la Clase de Paquete guardará el estado de una Actividad.

3) Después de cambiar la Orientación, entonces onCreate (Bundle savedInstanceState) llamará y recreará la actividad y cargará todos los datos de savedInstanceState.

4) Básicamente, la clase Bundle se usa para almacenar los datos de la actividad siempre que ocurra la condición anterior en la aplicación.

5) onCreate () no es necesario para las aplicaciones. Pero la razón por la que se usa en la aplicación es porque ese método es el mejor lugar para colocar el código de inicialización.

6) También puede poner su código de inicialización en onStart () o onResume () y cuando su aplicación se cargue primero, funcionará igual que en onCreate ().

Abhi
fuente
4

onCreate(Bundle)se llama cuando se inicia la actividad por primera vez. Puede usarlo para realizar una inicialización única, como crear la interfaz de usuario. onCreate()toma un parámetro que es nulo o alguna información de estado previamente guardada por onSaveInstanceState.

psxls
fuente
0

Se llama a onCreate (Bundle savedInstanceState) y savedInstanceState no será nulo si su Actividad y se finalizó en un escenario (vista visual) descrito anteriormente. Su aplicación puede tomar (capturar) los datos de salvadoInstanceState y regenerar su Actividad

kabilan
fuente