Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Varias formas de gestionar el cierre de la actividad de Android

Varias formas de gestionar el cierre de la actividad de Android

En los proyectos, a menudo necesitamos destruir todas las actividades al cerrar el programa, y ​​este también es un problema que se encuentra a menudo en las entrevistas. Aquí se muestran algunos métodos para cerrar el programa. :

1. La forma más sencilla es utilizar el método del sistema exit (0). Esta es la forma más sencilla y sencilla de forzar la salida del programa. Sin embargo, este método puede no ser fácil de usar en algunos casos. modelos Al salir, puede aparecer un cuadro emergente que indica que el programa puede fallar o que el programa se reinicie, lo cual no es una buena experiencia para el usuario.

2. Lanza una excepción para forzar la salida. El uso de este método es simplemente un desastre para la experiencia del usuario, así que no utilices este método.

3. Utilice la transmisión para notificar el cierre de la actividad. Este método también lo utilizan algunas personas. Puede descargarlo usted mismo en Baidu. Presentaré principalmente el siguiente método.

4. Utilice la aplicación, cree una colección de actividades en la aplicación, cree métodos para agregar y eliminar actividades, llame a estos métodos en el ciclo de vida de BaseActivity y llame a los métodos de BaseApplication cuando lo use. También es el método más utilizado en la actualidad, pero este método de agregar actividad en BaseActivity también tiene un problema, es decir, cuando desea utilizar una BaseActivity de terceros, puede heredar una, pero si desea utilizar dos de terceros. -party BaseActivities Bueno, Java en sí tiene herencia única, por lo que hará que la actividad no se cierre por completo.

Entonces la solución a este problema depende de una interfaz: ActivityLifecycleCallbacks; esta es una interfaz declarada en Aplicación, su contenido es el siguiente:

@Override

public voidonActivityCreated(Actividad actividad, Paquete paquete ) {

Log.e("onActivityCreated---", "se está ejecutando" "--" actividad.getLocalClassName()

}

@Override

public voidonActivityStarted(Actividad de actividad) {

Log.e("onActivityStarted---", "se está ejecutando" "--" actividad.getClass().getCanonicalName ( ));}

@Override

public voidonActivityResumed(Actividad de actividad) { Log.e("onActivityResumed---", "se está ejecutando" "--" actividad.getClass ( ).getCanonicalName());}

@Override

public voidonActivityPaused(Actividad de actividad) { Log.e("onActivityPaused---", "se está ejecutando" "-- " actividad.getClass().getCanonicalName());}

@Override

public voidonActivityStopped(Actividad de actividad) { Log.e("onActivityStopped---", "se está ejecutando " "--" actividad.getClass().getCanonicalName() );}

@Override

public voidonActivitySaveInstanceState(Actividad de actividad, Paquete de paquete) { Log.e("onActivitySaveInstanceState- - -", "se está ejecutando" "--" actividad.getPackageName());}

@Override

public voidonActivityDestroyed(Actividad de actividad) { Log.e("onActivityDestroyed- - -", "is running" "--" Activity.getPackageName());}

Puedes ver que todos los nombres de estos métodos están nombrados en tiempo pasado en inglés. También debes entender que el El ciclo de vida de la actividad se llamará aquí. Si desea que se ejecuten estos métodos, debe llamar a

RegisterActivityLifecycleCallbacks(.

this);

Recuerde llamar a este método y recuerde que estas devoluciones de llamada son para todas las actividades, por lo que podemos usar este método para cerrar la actividad o realizar otras operaciones.

Hay una forma de almacenar actividades a continuación, puede usarla si lo desea:

private staticWeakReferencecurAct;

private staticWeakHashMapacList=newWeakHashMaplt (); > /** *Establecer la actividad actual**

@paramact*/

public static voidsetCurActivity(Activity act) {curAct=newWeakReferencelt;gt;(act);acList.put (act, null) ;}

/***Obtener la actividad deseada*@return*/

public staticActivitygetCurActivity() {if(acList==null||acList.isEmpty ())return null; WeakReference wr =curAct; if(wr !=null) {returnwr.get();}return null;}

/***Actividad limpia*@paramact*/

public static voidclearCurActivity(Actividad actuar) { Objeto eliminar =acList.remove(actuar); if(eliminar!=nullamp; amp; TextUtils .equals(remove.getClass().getSimpleName(), curAct.get( ).getClass( ).getSimpleName())) {//TODO Quieres hacer algo.}}/***Destruir todas las actividades*/public static voiddestroyAllActivity() {if(null!=acListamp;amp; !acList. isEmpty() ) { Objeto[] claves =acList.keySet().toArray(); for(Objeto obj: claves) { Actividad acto = (Actividad)obj si(acto!=null) { acto.finish(); } } } }

/***Cerrar una actividad*@paramactivity*/

public static voidcloseActivity(String Activity) {if(null!=acListamp;amp; !acList. isEmpty( )) { Objeto[] claves =acList.keySet().toArray(); for(Objeto obj: claves) {if(obj !=nullamp;amp; actividad !=nullamp;amp; TextUtils.equals(obj. getClass( ).getSimpleName(), actividad)) { Acti

vity act = (Activity)obj; act.finish();} } }}

La siguiente es la dirección CSDN: Enlace original