¿Ondestroy no siempre se llama?

He puesto un código de limpieza de caché en onDestroy de mi actividad, pero la mayoría de las veces el código no se ejecuta a menos que termine explícitamente la actividad a través de finish() .

Editar: Solo lee onDestroy se llama solo con finish() o si el sistema tiene pocos recursos. Entonces, ¿dónde debo poner mi código de limpieza del caché? Si lo pongo en onPause() y el usuario vuelve a la aplicación, se borra el caché. De hecho, estoy almacenando archivos temporales importantes en la memoria caché que no deberían eliminarse en onPause .

De la documentación del desarrollador de Android:

vacío protegido onDestroy ()

Agregado en el nivel 1 de API Realice cualquier limpieza final antes de que se destruya una actividad. Esto puede ocurrir ya sea porque la actividad está terminando (alguien llamado finish () en ella o porque el sistema está destruyendo temporalmente esta instancia de la actividad para ahorrar espacio. Puede distinguir entre estos dos escenarios con el método isFinishing ().

Nota: ¡no confíe en que este método se llame como un lugar para guardar datos! Por ejemplo, si una actividad está editando datos en un proveedor de contenido, esas ediciones se deben confirmar en onPause () o onSaveInstanceState (Bundle), no aquí. Este método generalmente se implementa para liberar recursos como subprocesos que están asociados con una actividad, de modo que una actividad destruida no deja esas cosas mientras el rest de su aplicación aún se está ejecutando. Hay situaciones en las que el sistema simplemente eliminará el proceso de hospedaje de la actividad sin llamar a este método (ni a ningún otro), por lo que no debería usarse para hacer cosas que pretenden permanecer después de que el proceso desaparece.

Puede mover su código a onPause() o onStop()

Intenta usar onstop

Me gusta esto

 @Override protected void onStop() { super.onStop(); //write your code here } 

ondestroy se usa principalmente cuando el sistema elimina por completo la actividad de la memoria, o cuando un usuario cancela la actividad, quiere guardar sus datos en pausa, ya que siempre se llamará antes de la destrucción.