Principiante de Android: onDestroy
¿Debo colocar los comandos antes o después de super.onDestroy () al sobrescribir la actividad de una actividad?
protected void onDestroy() { //option 1: callback before or ... super.onDestroy(); //option 2: callback after super.onDestroy(); }
(Ahora me temo: si super.onDestroy es demasiado rápido, nunca llegará en la opción 2.)
- ¿Cuánto dura un paquete?
- Cómo recuperar el paquete onSaveInstanceState () en onResume ()?
- Nivel de aplicación onResume Android
- Activity.finish () se llama pero la actividad permanece cargada en la memoria
- En libgdx en Android, ¿cómo puedo guardar el estado del juego en caso de que se muera la aplicación?
- ¿Por qué se llama onStop justo después de que se inicie mi actividad?
- SavedInstanceState vs getIntent (). GetExtras ()
- Android Lifecycle - ActivityManager mata proceso -> Excepción al volver de fondo
- ¿Debe la llamada al método de superclase ser la primera instrucción?
- La onPause de la actividad y onResume que se llama después de comenzar, para ninguna razón
- Cómo manejar AsyncTask onPostExecute cuando se pausan para evitar IllegalStateException
- Una vez más en el ciclo de vida de la actividad: onStart se llama cuando no debe ser
- La aplicación se bloquea en rotación sin stackTrace
Esto es lo que sucede cuando llamas a super.onDestroy ();
Fuente de Android
protected void onDestroy() { mCalled = true; // dismiss any dialogs we are managing. if (mManagedDialogs != null) { final int numDialogs = mManagedDialogs.size(); for (int i = 0; i < numDialogs; i++) { final Dialog dialog = mManagedDialogs.valueAt(i); if (dialog.isShowing()) { dialog.dismiss(); } } } // also dismiss search dialog if showing // TODO more generic than just this manager SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); searchManager.stopSearch(); // close any cursors we are managing. int numCursors = mManagedCursors.size(); for (int i = 0; i < numCursors; i++) { ManagedCursor c = mManagedCursors.get(i); if (c != null) { c.mCursor.close(); } } }
Esencialmente esto significa que no importa si usted lo llama antes o después de su código.
Cualquier cosa que pueda estar relacionada con el uso de los recursos de la actividad debe ser antes de la llamada a super.onDestroy()
. El código después de que se b alcanzado, pero podría causar problemas si necesita esos recursos.
Coloque su código después de la super.onDestroy();
p.ej:
protected void onDestroy() { super.onDestroy(); // Put code here. }
Su código terminará de ejecutarse al sobreescribir el método.
Llamar a super.onDestroy no interrumpirá el subproceso de llamada o algo así. Su código se ejecutará sin importar dónde lo coloque, antes o después de super.onDestroy.
Super.onDestroy solo liberará recursos que puedan ser referenciados para esta actividad por framework (como diálogos del sistema y cursores administrados)
Te sugiero que consultes este enlace para más detalles
http://developer.android.com/reference/android/app/Activity.html#onDestroy ()
Depende. Si desea que las acciones sean aplicadas después de la función super
, debe colocar su función después de la super. Supongo que tienes que entender el uso de super
primero. Por ejemplo, eche un vistazo a esta pregunta
Llegará en la opción 2. onDestroy () no destruye realmente el objeto. Su instancia sigue viva después de ejecutar y devolver la onDestroy () de la superclase.
Edit: esto es lo que onDestroy hace en orden:
- Descartar todos los diálogos que la actividad estaba administrando.
- Cierre todos los cursores que la actividad estaba administrando.
- Cerrar cualquier diálogo de búsqueda abierto
- La API de Twitter no acepta URL de devolución de llamada para la aplicación para Android
- El ayudante IAB no está configurado. No se puede realizar la operación: queryInventory