studio - Cómo distinguir entre cambio de orientación y dejar aplicación Android
manejando la rotación de pantalla en android studio (4)
Entiendo que cuando cambia la orientación de la pantalla, se invocan las actividades actuales en Destroy () seguidas por onCreate () para recrear de forma efectiva la actividad. Necesito saber cómo decirme programáticamente si la aplicación se está abandonando o si solo se está cambiando la orientación.
Un método es que la actividad anterior me notifique cuando se está llamando a su método onResume (), esto me permitirá saber que el usuario ha presionado el botón Atrás y que la orientación no se ha modificado.
PD. Estoy buscando una solución más elegante que escuchar un clic en el botón de hardware trasero.
Esto era lo que quería hacer:
Tengo dos pestañas, cuando la actividad se ingresa por primera vez o el usuario ha abandonado la actividad y ahora la está ingresando, se muestra una pestaña determinada según algún criterio.
Cuando la orientación cambie, necesito permanecer en la misma pestaña.
Puede obtener el valor del método Activity.getChangingConfigurations() en su onDestroy
llamada onDestroy
. Esto arrojará un resultado como ORIENTATION_PORTRAIT , que podría verificar contra su orientación actual .
Tenga en cuenta que los cambios de orientación y cierre de actividades no son las únicas condiciones a considerar aquí: ¿qué hay de volver a la pantalla de inicio, llamadas entrantes y otras aplicaciones que roban el foco, y todos los otros escenarios cuando su actividad ya no está en la parte delantera? de la pila?
La mayoría de las veces no necesitarás hacer esto. Si está tratando de corregir algún problema de estado de la actividad (a menudo se manifiesta como una NullPointerException
al rotar la pantalla) al capturar el evento de orientación; revisa el ciclo de vida de la actividad de Android y asegúrate de que no estás tratando de hackear una solución para un error de diseño. Publique su problema original en este sitio si no está seguro.
Use el método isFinishing()
.
@Override
protected void onDestroy() {
super.onDestroy();
if (isFinishing()) {
// do stuff
} else {
//It''s an orientation change.
}
}
para API lvl> = 11 La actividad tiene un método isChangingConfigurations()
puede usar isChangingConfigurations()
Leer de la documentation
Compruebe si esta actividad está en proceso de destrucción para volver a crearla con una nueva configuración. Esto se usa a menudo en onStop () para determinar si el estado necesita limpieza o se pasará a la siguiente instancia de la actividad mediante onRetainNonConfigurationInstance ().
Devuelve Si la actividad se está derribando para volver a crearse con una nueva configuración, devuelve verdadero; else devuelve falso
Explicar de manera simple con el ejemplo
isChangingConfigurations()
es un método usado para verificar si la actividad será destruida para volver a crearse nuevamente (como resultado del cambio en la orientación)
Cómo usarlo ?
si usas api> = 11, entonces no hay problema, pero si usas api <11, entonces debemos manejar este manual de método. Formulo una variable booleana llamada IsconfigChange.
private boolean IsconfigChange ;
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IsconfigChange = true ;
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public boolean isChangingConfigurations() {
if(android.os.Build.VERSION.SDK_INT >= 11){
Log.i("DEBUG", "Orientation changed api >= 11 ");
return super.isChangingConfigurations();
}else {
Log.i("DEBUG", "Orientation changed api < 11 ");
return IsconfigChange;
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onStop() {
super.onStop();
if(isChangingConfigurations()){
Log.i("DEBUG", "isChangingConfirgurations OnStop Called");
} else{
Log.i("DEBUG", "OnStop Called");
}
}
Veraniego
puede usar isChangingConfigurations
en onStop
para verificar si la aplicación se detiene para ser destruida o debido a cambios en la orientación.
o puede usar isFinishing
verifique mi respuesta here