Estudio en profundidad del ciclo de vida de la Actividad

prefacio

Entre los cuatro componentes principales de Android, la posición de la actividad también es muy importante; comprender el proceso del ciclo de vida de la actividad es sin duda muy útil para el desarrollo de Android. Entonces, aprendamos más sobre el ciclo de vida de Android hoy. ¡Bar!

Antes de aprender el ciclo de vida de Actvity, primero hablemos sobre la comprensión del autor de Activity. Cuando el autor entró en contacto por primera vez con el desarrollo de Android, estaba bastante confundido acerca de qué es Activity, y muchos libros de texto introductorios no introdujeron en detalle qué es Activity. La mayoría de ellos simplemente decían que Activity es uno de los cuatro componentes principales de Android, y luego no hay qué tiene de malo, comencemos a introducir la función de devolución de llamada de su ciclo de vida...
Tal vez usted que lee este artículo ahora puede pensar, la actividad no es una actividad, todo el contenido que solemos ver en la pantalla completa de un teléfono Android? Por ejemplo, la pantalla del teléfono móvil en la imagen de abajo.

El autor piensa que esta es una interpretación sesgada de la Actividad. Lo que ve en la pantalla de un teléfono móvil no es una Actividad, sino una Vista de subclase heredada de DecorView de FrameLayout, y la Actividad solo se usa como un portador para llevar estas Vistas. El autor piensa que la Actividad puede considerarse como un portador, no como una vista que se ve en la pantalla del teléfono móvil.

Jerarquía de actividades


Debido a que eliminé esta imagen principalmente para ilustrar mejor que la actividad se puede considerar como un operador, en lugar de las vistas (TitleView y ContentView) que se ven en la pantalla del teléfono móvil, por lo que soy más específico sobre la implementación del código fuente, porque la capacidad del autor está temporalmente limitada, no voy a profundizar en ella por el momento aquí:);

Diagrama de flujo del ciclo de vida de la actividad

actividad_ciclo de vida

La actividad en el sistema Android es administrada por la pila de actividades (pila de actividades) (el elemento de administración de la pila se caracteriza por el principio de "primero en entrar, último en salir"), cuando se inicia una nueva actividad, la nueva actividad se insertará en la pila de actividades en el interior , se convierte en el elemento superior de la pila de actividades, y esta Actividad comienza a prepararse para interactuar con el usuario, es decir, se convierte en la Actividad activa (cabe señalar que la Actividad actual que interactúa con el usuario siempre conservará la parte superior posición de la pila, hasta que se salga de la Actividad actual que interactúa con el usuario, la Actividad detrás de ella volverá a la parte superior de la pila nuevamente y se convertirá en la Actividad activa).

Una nueva actividad se inserta en la pila de tareas, o una actividad que está interactuando actualmente con el usuario se elimina de la pila de tareas. motivado.

1.0 Estado representado por cada función de devolución de llamada en Actividad

  • onCreate()Se vuelve a llamar cuando la actividad se crea por primera vez.En esta función de devolución de llamada, se utiliza principalmente para configurar la vista de diseño que se mostrará, vincular datos a la vista de diseño e inicializar variables;
    • onRestrart()Cuando la Actividad es completamente invisible, pero la Actividad no ha sido destruida, cuando la Actividad regresa a la parte superior de la pila (cuando es completamente invisible, la Actividad no está en la parte superior de la pila), se volverá a llamar, y luego onStart() será llamado de vuelta;
    • onStart()La actividad es visible para el usuario, pero aún no ha adquirido el foco, es decir, se vuelve a llamar al usuario cuando no puede realizar operaciones en ella, pero el proceso de devolución de llamada es muy corto para el usuario y el usuario no puede darse cuenta. eso. ;
      • onResume()Se vuelve a llamar antes de que la Actividad actual reciba el foco, es decir, después de la devolución de llamada, el usuario puede realizar operaciones en él, como hacer clic en el cuadro de entrada para realizar una serie de operaciones como entrada. todo visible para el usuario;
      • onPause()Se vuelve a llamar cuando el contenido anterior solo es parcialmente visible para el usuario (nota: la función no se volverá a llamar cuando aparezca un cuadro de diálogo en la interfaz, o el cuadro de entrada aparece después de hacer clic en el cuadro de entrada, aunque también es parcialmente visible para el usuario en este momento), por ejemplo, hay un cuadro de diálogo. Cuando aparece la actividad de estilo de cuadro, se devolverá la llamada a esta función;
    • onStop()Cuando la vista en la Actividad es completamente invisible, se devolverá la llamada a esta función;
  • onDestroy()Cuando finalice la actividad, ejecute el método finish(), o cuando la memoria del sistema esté apretada, la actividad se eliminará y se devolverá la llamada a esta función;

La función de devolución de llamada anterior es la función de devolución de llamada correspondiente cuando el usuario abre una actividad, cierra una actividad y vuelve a abrir una actividad.

2.0 Ver el ciclo de vida de la actividad a través del modo Dubug

El siguiente código es el código fuente utilizado por el autor al realizar Dubug:

public class MainActivity extends AppCompatActivity {
    
    

    private static final String TAG = "测试Activity的生命周期";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, "onCreate: ");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "onStart: ");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "onResume: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart: ");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }


}
2.1 Agregue una actividad a la parte superior de la pila por primera vez:

202017-10-04

2.2 El estado de la Actividad cuando se presiona la tecla de menú:

202017-10-04

2.3 Cuando se ejecuta una actividad conversacional en la parte superior de la pila de tareas:

2017-08

Este modo Dubug es principalmente para pruebas. Cuando la actividad muestra un cuadro de entrada, un cuadro de diálogo de tipo Fragmento o un cuadro de diálogo que no es de tipo Fragmento, el cambio en el ciclo de vida de la actividad se puede ver en el registro de la consola. Los tres anteriores las situaciones no lo son. Hará que cambie el ciclo de vida de la actividad, y cuando el autor haga clic en el tercer botón (este botón supervisa una actividad que solo muestra imágenes y formularios de diálogo), la consola imprime la función de devolución de llamada onPause(), que está en la Actividad Cuando es parcialmente visible, o así: cuando una Actividad grande está cubierta por otra Actividad pequeña, la Actividad grande todavía es parcialmente visible para el usuario, y la función onPause() será llamada de vuelta en este momento; cuando la
Actividad pequeña La Actividad está oculta. En este momento, la Actividad grande volverá a la parte superior de la pila. Antes de volver a la parte superior de la pila, se volverá a llamar a la función onResume() para prepararse para interactuar con el usuario de nuevo;

2.4 Cierre la actividad, es decir, elimine la actividad de la parte superior de la pila:

2000-39

3.0 Cambios en el ciclo de vida de la Actividad al cambiar entre pantallas horizontales y verticales

3.1 Cambios en el ciclo de vida de la Actividad al cambiar de retrato a paisaje

2000-47


3.2 Cambios en el ciclo de vida de la Actividad cuando la pantalla cambia de paisaje a retrato

2000-48


Como se puede ver en el registro de depuración del cambio de pantalla horizontal y vertical anterior, al cambiar entre pantallas horizontales y verticales, la actividad devolverá la llamada a la función onDestroy() y luego volverá a llamar a la función onCreat(). no permita que la aplicación cambie entre pantallas horizontales y verticales. En este momento, se produce la función de devolución de llamada onDestroy() y, a continuación, se devuelve la llamada a la función onCreat(). En este momento, si no desea que Activity vuelva a llamar a la función onCreat(), existen dos soluciones:

  • Configurar propiedades relacionadas en AndroidManifest.xml directamente no permite cambiar entre pantallas horizontales y verticales,
    principalmente para configurar android:screenOrientation="portrait"esta propiedad en una Actividad que no permite cambiar entre pantallas horizontales y verticales, portraitlo que significa que solo se permiten pantallas verticales, no horizontales; y landscapeviceversa

El código debajo del nodo de la aplicación es el siguiente: (como en la Nota 1 a continuación)

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait"> <!--1-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
  • Configure atributos relevantes en AndroidManifest.xml, declare directamente que el ciclo de vida de la actividad no cambiará,
    principalmente configure este atributo en su propio AndroidManifest.xml android:configChanges="orientation|keyboardHidden|screenSize".

El código debajo del nodo de la aplicación es el siguiente: (como en la Nota 2 a continuación)

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"> <!--2-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

resumen

Esta vez, el análisis del proceso del ciclo de vida de Activity es solo a nivel de su interfaz API. Para el análisis del ciclo de vida de la Actividad, el autor cree que mientras se comprenda el cambio de la Actividad, la relación entre el cambio entre las Actividades y sus posiciones en la pila de Actividades, los cambios en el ciclo de vida de la La actividad será bien analizada.


Descargar código fuente ActivityTest

Supongo que te gusta

Origin blog.csdn.net/HongHua_bai/article/details/78159113
Recomendado
Clasificación