2012-10-12 54 views
6

¿Debo colocar comandos antes o después de super.onDestroy() al sobrescribir el ondestroy de una actividad?Principiante de Android: onDestroy

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á a la opción 2.)

+0

no veo lo que podría evitar que llegues al 2 – njzk2

+0

Esta pregunta es un duplicado de http://stackoverflow.com/q/18821481/53974, y que en realidad tiene una respuesta bien investigada. http://stackoverflow.com/a/18874519/53974 – Blaisorblade

Respuesta

3

Esto es lo que sucede cuando llamas a super.onDestroy();

Android Source

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(); 
     } 
    } 
} 

Básicamente, esto significa que no importa si llama antes o después de su código.

+0

¿significa también que no necesito llamar a "dismiss()" para el onDestroy de la actividad? Creo que recuerdo que había registros de fugas, ¿no? ¿En qué casos ocurren las filtraciones? –

+1

Descartar es solo para Diálogos y no relacionado con esta pregunta, ya que un Diálogo tiene un ciclo de vida diferente al de una actividad. Si tiene problemas de diálogo, debe comenzar una nueva pregunta para que su emisión se pueda abordar mejor. –

+0

pero está relacionado con él, ya que le pregunta dónde colocar los comandos y ha mostrado su código. el código parece haber descartado el mecanismo de diálogo –

7

Cualquier cosa que podría estar relacionado con el uso de los recursos para la actividad debe ser antes de la llamada a super.onDestroy() . El código siguiente se alcanzará, pero puede causar problemas si necesita esos recursos.

+0

por qué el manual del desarrollador de Android no lo recomienda en ningún lado :-(busqué la documentación durante horas ... – ledy

0

Depende. Si desea que sus acciones se apliquen después de la función super, debe colocar su función después de la súper. Supongo que primero debe comprender el uso de super. Por ejemplo, echar un vistazo a this question

3

Coloque el código después de la super.onDestroy(); por ejemplo:

protected void onDestroy() { 
    super.onDestroy(); 

    // Put code here. 

} 

Su código termine de ejecutarse cuando reemplazando el método.

+1

voy a llamar a testActivity.Instance.InfoThatIAmComingBackToTheMainActivityNow() – ledy

0

Llegará a la opción 2. onDestroy() en realidad no destruye el objeto. Su instancia todavía está activa después de que onctroy() de la superclase se ejecute y regrese.

Editar: esto es lo que lo hace con el fin OnDestroy:

  • despedir a cualquier diálogos de la actividad manejaba.
  • Cierre todos los cursores que estaba gestionando la actividad.
  • cerrar cualquier búsqueda abierta de diálogo
+0

es decir, si el dispositivo fue lo suficientemente rápido, una referencia o cursor podría desaparecer incluso antes de que llegue con la opción 2? – ledy

1

Calling 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 hará solamente recursos libres que podrían ser objeto de referencia para esta actividad por el marco (tales como los diálogos del sistema y cursores gestionados)

le sugiero que consulte este enlace para más detalles

http://developer.android.com/reference/android/app/Activity.html#onDestroy()

Cuestiones relacionadas