Ciclo de vida de la actividad – onCreate invitó a cada reorientación

Tengo una actividad simple que carga un mapa de bits en onCreate . Encuentro que si giro el dispositivo puedo ver de los registros que onCreate llamó otra vez. De hecho, dado que todas las variables de instancia se establecen de nuevo en valores por defecto, sé que toda la Actividad ha sido re-instanciada.

Después de girar 2 veces, obtengo un FC porque no se puede asignar suficiente memoria al mapa de bits. (¿Todas las instancias de la actividad aún están vivas en algún lugar o el GC no se limpia lo suficientemente rápido?)

 @Override public void onCreate(Bundle savedInstanceState) { File externalStorageDir = Environment.getExternalStorageDirectory(); File picturesDir = new File(externalStorageDir, "DCIM/Camera"); File[] files = picturesDir.listFiles(new FilenameFilter(){ public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".jpg"); }}); if (files.length > 0) { Bitmap bm = BitmapFactory.decodeStream(new FileInputStream(files[0])); ImageView view = (ImageView) findViewById(R.id.photo); view.setImageBitmap(bm); } } 

De todo lo que leo, onCreate debe ser llamado una vez durante la vida de una aplicación. ¿Me equivoco en esto? ¿Cómo puede volver a orientar el dispositivo para que la actividad sea recreada?

12 Solutions collect form web for “Ciclo de vida de la actividad – onCreate invitó a cada reorientación”

La actividad se vuelve a crear después de cada rotación de forma predeterminada. Puede anular este comportamiento con el atributo configChanges de la etiqueta de activity en AndroidManifest. Para obtener más detalles y opciones, consulte http://developer.android.com/guide/topics/resources/runtime-changes.html.

 android:configChanges="keyboardHidden|orientation|screenSize" 

Precaución: A partir de Android 3.2 (API nivel 13), el "tamaño de pantalla" también cambia cuando el dispositivo cambia entre orientación vertical y horizontal. Por lo tanto, si desea evitar que el tiempo de ejecución se reinicie debido al cambio de orientación al desarrollar para API de nivel 13 o superior (como declarado por los atributos minSdkVersion y targetSdkVersion), debe incluir el valor "screenSize" además del valor "orientation". Es decir, debes decalar android:configChanges="orientation|screenSize" . Sin embargo, si su aplicación se orienta al nivel de API 12 o inferior, su actividad siempre se encarga de este cambio de configuración (este cambio de configuración no reinicia su actividad, incluso cuando se ejecuta en un dispositivo Android 3.2 o superior).

http://developer.android.com/guide/topics/resources/runtime-changes.html

Qué sucede cuando la orientación cambió

Ciclo de vida de la orientación

 onPause(); onSaveInstanceState(); onStop(); onDestroy(); onCreate(); onStart(); onResume(); 

—- aplicación recreada y ahora se está ejecutando —

Si realiza operaciones largas en onCreate() y desea evitar volver a crear su actividad, añada el atributo configChanges en su mainfest

 <activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name"> 

ScreenSize si apunta a api> = 13

Si desea evitar que FC no tenga suficiente memoria, debe desasignar recursos en onStop (o onPause). Esto le permite usar la memoria fresca en onCreate.

Esta es una solución alternativa para prevenir la recreación de la actividad usando

Android: configChanges = "keyboardHidden | orientación"

Ya que a veces el diseño de su actividad es diferente en el retrato y el paisaje (diseño, distribución). Evitar la recreación en el cambio de orientación evitará que su actividad utilice el diseño de la otra orientación.

El método Create llamará cada vez que hagas la orientación, para evitar esto debes usar

 //Define Below in you Manifest file. <activity android:name="com.ecordia.activities.evidence.MediaAttachmentView" android:configChanges="keyboardHidden|orientation|screenSize" </activity> //Define Below in your activity. @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { //your code } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { //your code } } 

¡Funcionará como un encanto !!

Sí, onCreate() se llama cada vez que cambia la orientation pero se puede evitar la re-creation de Activity agregando el configChanges attribute de Activity en el archivo de AndroidManifest en la etiqueta de actividad.

 android:configChanges="keyboardHidden|orientation" 

Utilizar

Android: configChanges = "keyboardHidden | orientation" en Manifest XML activity Tag

 @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); } 

Utilice el código anterior para realizar cambios relacionados con la orientación en su código Java de actividad

¡¡¡Aclamaciones!!!

Una de las "soluciones" más comunes y sugeridas para tratar con los cambios de orientación es no tratar con ellos. Puede hacerlo estableciendo el indicador android: configChanges en su Actividad en AndroidManifest.xml como se muestra a continuación:

 <activity android:name=".MyActivity" android:label="@string/title_my_activity" android:configChanges="orientation|screenSize|keyboardHidden" /> 

Esta NO es la forma correcta de lidiar con los cambios de orientación.

La manera correcta es implementar el método onSaveInstanceState (esto podría estar en tu Activity, Fragment o ambos) y colocar los valores que necesitas guardar en el argumento Bundle que se pasa al método.

Está bien descrito aquí: http://code.hootsuite.com/orientation-changes-on-android/

Si bien puede parecer un poco tedioso implementar, el manejo de los cambios de orientación le ofrece varios beneficios: podrá utilizar fácilmente diseños alternativos en orientaciones de retrato y paisaje y podrá manejar muchos estados excepcionales como situaciones de poca memoria Y las interrupciones de llamadas entrantes sin ningún código extra.

Ciclo de vida de Actvity cuando gira la pantalla

 onPause onSaveInstanceState onStop onDestroy onCreate onStart onRestoreInstanceState onResume 

Por favor, vea mi forma de hacerlo:

http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html

Fragmento es: –

 @Override protected void onSaveInstanceState(Bundle b) { super.onSaveInstanceState(b); String str="Screen Change="+String.valueOf(screenChange)+"...."; Toast.makeText(ctx,str+"You are changing orientation...",Toast.LENGTH_SHORT).show(); screenChange=true; } @Override public void onCreate(Bundle b) { super.onCreate(b); ctx=getApplicationContext(); if(!screenChange) { String str="Screen Change="+String.valueOf(screenChange); 

Tuve el mismo problema, en el que mi onCreate se llama varias veces cuando se cambia la orientación de la pantalla. Mi problema se resolvió cuando añado android:configChanges="orientation|keyboardHidden|screenSize" en la etiqueta de activity en el manifest

Tuve el mismo problema y hice algunas soluciones

Define la variable boleana didLoad con valor falso

Private boolean didLoad = false;

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); if (!this.didLoad){ // Your code... this.didLoad = true; } 
  • GetRunningAppProcesses () devuelve los procesos que fueron destruidos
  • Cómo borrar la pila de actividad de seguimiento en evento de prensa de nuevo?
  • ¿Por qué se arroja NPE al finalizar Actividad?
  • ActivityLifecycleCallbacks no se activan cuando se cancela la actividad a través de "No mantener actividades"
  • Eliminación de una actividad de la pila de historial
  • ¿Qué acciones realiza la tecla de retroceso / retroceso en el disparador de Android?
  • OnBackPressed - evite destruir la actividad
  • Actividad onStop () no se llama cuando se presiona el botón de inicio en el modo de ventana multi Android N
  • ¿Cómo terminar con seguridad una actividad en el método onResume ()?
  • El diseño de la actividad parpadea después de terminar () se llama
  • ¿Cómo construyes una pila posterior de Android cuando se inicia una actividad directamente desde una notificación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.