Me preguntaba ¿por qué no usar android:configChanges="keyboardHidden|orientation"
en todas (casi todas;) las actividades?
Bienes:
- no tiene que preocuparse por su actividad rotada
- es mas rapido
No tan lindo:
- necesita cambiar sus diseños si dependen del tamaño de la pantalla (por ejemplo, diseños con dos columnas más o menos)
Malo:
- no hay forma flexible de tener diferentes diseños en diferentes orientaciones
- no tan bueno cuando se usan fragmentos
Pero si no usamos diferentes diseños, ¿por qué no?
android
android-layout
Mikooos
fuente
fuente
Respuestas:
Fondo rapido
De manera predeterminada, cuando ocurren ciertos cambios de configuración clave en Android (un ejemplo común es un cambio de orientación), Android reinicia completamente la Actividad en ejecución para ayudarlo a adaptarse a dichos cambios.
Cuando define
android:configChanges="keyboardHidden|orientation"
en su AndroidManifest, le está diciendo a Android: "No realice el restablecimiento predeterminado cuando se extrae el teclado o se gira el teléfono; quiero manejar esto yo mismo. Sí, sé lo que estoy haciendo "¿Es esto algo bueno? Pronto veremos ...
¿Sin preocupaciones?
Una de las ventajas con las que comienza es que hay:
En muchos casos, las personas creen erróneamente que cuando tienen un error generado por un cambio de orientación ("rotación"), simplemente pueden solucionarlo introduciéndolo
android:configChanges="keyboardHidden|orientation"
.Sin embargo, android: configChanges = "keyboardHidden | orientación" no es más que una curita. En verdad, hay muchas formas en que se puede activar un cambio de configuración. Por ejemplo, si el usuario selecciona un nuevo idioma (es decir, la configuración regional ha cambiado), su actividad se reiniciará de la misma manera que lo hace un cambio de orientación. Si lo desea, puede ver una lista de todos los diferentes tipos de cambios de configuración .
Editar : Sin embargo, lo que es más importante, como hackbod señala en los comentarios, su actividad también se reiniciará cuando su aplicación esté en segundo plano y Android decida liberar algo de memoria eliminándola. Cuando el usuario vuelve a su aplicación, Android intentará reiniciar la actividad de la misma manera que si hubiera algún otro cambio de configuración. Si no puede manejar eso, el usuario no estará contento ...
En otras palabras, usar
android:configChanges="keyboardHidden|orientation"
no es una solución para sus "preocupaciones". La forma correcta es codificar sus actividades para que estén contentas con cualquier reinicio que Android les arroje. Esta es una buena práctica que lo ayudará en el futuro, así que acostúmbrese.Entonces, ¿cuándo debo usarlo?
Como mencionó, hay una clara ventaja. Sobrescribir el cambio de configuración predeterminado para una rotación al manejarlo usted mismo acelerará las cosas. Sin embargo, esta velocidad tiene un precio de conveniencia.
En pocas palabras, si usa el mismo diseño para retrato y paisaje, está en buena forma al sobrescribir. En lugar de una recarga completa de la actividad, las vistas simplemente cambiarán para llenar el espacio restante.
Sin embargo , si por alguna razón usa un diseño diferente cuando el dispositivo está en horizontal, el hecho de que Android vuelva a cargar su Actividad es bueno porque luego cargará el diseño correcto. [Si usa la anulación en una actividad de este tipo y desea hacer un nuevo diseño mágico en tiempo de ejecución ... bueno, buena suerte, está lejos de ser simple]
Sumario rápido
Por supuesto, si
android:configChanges="keyboardHidden|orientation"
es adecuado para usted, entonces úselo. Pero POR FAVOR, asegúrese de probar qué sucede cuando algo cambia, porque un cambio de orientación no es la única forma en que se puede activar un reinicio completo de la actividad.fuente
Please don't do the default reset when the keyboard is pulled out
¡Nunca he visto un reinicio de actividad para sacar el teclado !Desde mi punto de vista: si el diseño es el mismo en modo horizontal y vertical, también puede deshabilitar uno de los dos en su aplicación.
La razón por la que afirmo esto es que yo, como usuario, espero que la aplicación me brinde algún beneficio cuando cambio de orientación. Si no importa cómo sostengo mi teléfono, entonces no necesito la opción.
Tomemos, por ejemplo, una aplicación donde tenga un ListView, y al hacer clic en un ListItem desea que se muestre una vista detallada de ese elemento. En el paisaje, esto lo haría dividiendo la pantalla en dos, con ListView a la izquierda y la vista detallada a la derecha. En Portrait, tendría la lista en una pantalla y luego cambiaría la pantalla a la vista detallada cuando se selecciona ListItem. En ese caso, el cambio de orientación tiene sentido, así como diferentes diseños.
fuente
No veo por qué ... reinicios ocasionales están bien en mi opinión ... configChanges maneja la mayoría de los casos para mí ... bueno, tal vez en algunos tipos de aplicaciones esto puede ser un problema, pero depende realmente del tipo de aplicación y de cómo se restaura estado cuando la aplicación se reinicia ... Cuando una de mis aplicaciones se reinicia, el usuario vuelve a iniciar sesión y mi código abre la última actividad y el usuario pierde algunos pasos para volver a donde estaba, pero no es gran cosa. En otros, siempre se mantiene algún estado algún estado siempre se restaura al reiniciar. Cuando se reiniciaba la actividad, tenía que ser que la aplicación no se había utilizado o algo así ... así que no había ningún problema ... En el juego, por ejemplo, puede ser un problema o en algún otro tipo de aplicación que no conozco ...
Digo que cuando lo haces de esta manera, las aplicaciones simplemente funcionan bien en circunstancias normales. Y el código es mucho más legible sin un montón de lógica necesaria para guardar y restaurar donde solo puedes hacer nuevos errores y tienes que mantenerlo todo el tiempo ... seguro si Android se queda sin energía y mata tu ventana de aplicación, pierde el contexto y comienza de nuevo, pero esto sucede solo en situaciones especiales y en dispositivos más nuevos, creo que esto es cada vez más raro ...
Así que mátame, pero uso esto en todas las aplicaciones con bastante éxito ... android: configChanges = "locale | keyboard | keyboardHidden | orientación | screenLayout | uiMode | screenSize | smallestScreenSize" Pero entiendo que para algún tipo especial de aplicaciones puede no ser buena manera, pero la mayoría de las aplicaciones pueden vivir con esto simplemente bien.
fuente
Sí, creo que hacer una pausa lo hará más rápido que liberar al jugador. Sin embargo, todavía tengo la pausa.
Ahora he encontrado una solución que no detendrá la canción.
Indique en el manifiesto que manejará el cambio de configuración para la orientación de la pantalla y luego usará el método onConfigurationChanged para cargar el archivo de diseño. Al hacer esto en logCat, puedo ver que onPause, onCreate y onResume no se llaman y, por lo tanto, la canción no se detiene.
Actualice el manifiesto para manejar la orientación.
agrega este código
fuente