Estoy interesado en saber cuáles son los métodos sobrescritos, cuando un dispositivo Android es rotada (es decir, cuando los cambios de configuración)?

onSaveInstanceState(...), onConfigurationChanged(...), onRestoreInstanceState(...) – algo similar a esto?

Será también interesante para mí escuchar acerca de todo el proceso conectado con un cambio de configuración. Gracias.

InformationsquelleAutor lomza | 2011-12-05

4 Comentarios

  1. 4

    Cuando se gire el dispositivo de su Actividad se vuelva a crear y todas las variables que van a ser re-inicializado. Así que, en ese caso, si desea que algunos de los valores a seguir siendo el mismo en la Rotación también puede almacenar su estado mediante el onSaveInstanceState() y se pueden restaurar en onCreate() de nuevo marcando Paquete no es null.

    if(savedInstanceState != null){
                //get the restore value from the Bundle
            }

    Donde como onConfigurationChanged() será llamado cuando se gire el Dispositivo(tenga en cuenta que esto sólo será llamada si ha seleccionado configuraciones que desea controlar con el configChanges atributo en el manifiesto). Desde el parámetro obtendrá la nueva configuración del dispositivo.

    Si usted no desea que su Actividad para obtener re-creado en la rotación del Dispositivo, a continuación, usted tiene que añadir esta línea a su etiqueta de actividad en el AndroidManifest archivo.

    android:ConfigChanges="keyboardHidden|orientation"
    • Tengo un problema con esto. Tengo dos diseños: uno horizontal y uno para el retrato. Tengo una vista de texto. Y yo NO quiero perder el texto escrito en la rotación. Hasta este momento he utilizado onConfigurationChanged, no es básicamente el mismo personal como en onCreate. El problema es que en onConfigurationChanged no tengo un Paquete y no puedo guardar/recuperar el texto escrito. Cuando yo uso onSaveInstanceState() Y onConfigurationChanged(), el primero no da ningún efecto. No sé cómo resolver este problema….
    • recuperar el Paquete de valores en onCreate() y uso posterior.
    • Comprendí mi error, yo no tuve que usar configChanges. Solo necesitaba reemplazar onSaveInstanceState y onRestoreInstanceState. No puedo guardar/recuperar mi vista de texto, diseño de gestión de la configuración se realiza de forma automática, así que no tendrás que hacer nada más. onConfigurationChanged fue primordial de todo y no necesito tan complicado lógica.
    • Por favor, tenga cuidado con qué/cómo ahorrar. Una cita de la developer docs: «nunca se debe pasar un objeto que está ligada a la Actividad, como una Imagen, un Adaptador, un punto de Vista o cualquier otro objeto que está asociado con un Contexto. Si lo hace, perderá todos los puntos de vista y recursos de la actividad original de la instancia. (Pérdida de recursos significa que la aplicación mantiene una retención sobre ellos y que no se puede recolección de basura, así que un montón de memoria pueden perderse.)» Consulte developer.android.com/guide/topics/resources/… para más info
  2. 5

    De acuerdo con el desarrollador de android de referencia a utilizar:

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    
        //Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
        }
    }

    Para obtener más información, consulte: http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

    Usted podría estar interesado en ver: http://developer.android.com/guide/topics/manifest/activity-element.html#config

    Aquí usted puede encontrar toda la configuración oyente puede escuchar.

    Recordar a poner en el manifiesto de android:

    <activity 
       android:configChanges=["orientation"]
       . . .
    </activity>

    Espero que esto ayude…

    • Gracias por «el Manejo de Cambios de ejecución» enlace. Actualmente estoy usando onConfigurationChanged.
    • Esta respuesta me ayudó .. pero la parte acerca de la actualización de manifiesto con alguna forma de android:configChanges .. me perdí porque se fue hacia la parte inferior y estoy en un modesto tamaño de la pantalla. No es un gran negocio .. pero puede ser útil para tener que cerca de el código Java .. yo era establecer puntos de interrupción en ese método, pero ellos no se activa hasta que me di cuenta de que necesitaba el manifiesto de actualización. De cualquier manera .. gracias por hacer que me va en la dirección correcta!
  3. 2

    De los desarrolladores de android…

    Para retener un Objeto durante un tiempo de ejecución de cambio de configuración:

    1. Reemplazar el onRetainNonConfigurationInstance() método para devolver el Objeto que desea conservar.
    2. Cuando su Actividad se crea de nuevo, llame a getLastNonConfigurationInstance() para recuperar el Objeto.

    Android llamadas onRetainNonConfigurationInstance() entre onStop() y onDestroy() cuando se apaga su Actividad debido a un cambio en la configuración. En la implementación de onRetainNonConfigurationInstance(), puede devolver cualquier Objeto que usted necesita con el fin de restaurar eficazmente su estado después del cambio de configuración.

    Un escenario en el que esto puede ser valioso es si la aplicación carga un montón de datos desde la web. Si el usuario cambia la orientación del dispositivo y de la Actividad se reinicia, su aplicación debe volver a recuperar los datos, lo que podría ser lento. Lo que usted puede hacer en su lugar es implementar onRetainNonConfigurationInstance() para devolver un objeto la realización de sus datos y, a continuación, recuperar los datos cuando su Actividad se inicia de nuevo con getLastNonConfigurationInstance().

    Mirar aquí para obtener más información La retención de un Objeto Durante un Cambio de Configuración usted puede también encontrar un ejemplo más de su..

    Gracias..

    • Gracias. Información útil 😉
  4. 1

    Ir a Manifestar y agregar:
    android:configChanges=»orientación|screenSize»

     <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"
                        android:configChanges="orientation|screenSize"
                        />

    En la Actividad Principal de: Copia y Pega este código:

     @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
    
    
        }

    Todo Hecho –

Dejar respuesta

Please enter your comment!
Please enter your name here