¿Es necesario escribir un método onDestroy en una aplicación de Android?

Personalmente, nunca lo hago. Este es el por qué:

Nota: ¡no cuente con que se llame a este método como un lugar para guardar datos ! Por ejemplo, si una actividad está editando datos en un proveedor de contenido, esas ediciones deben confirmarse 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 deje esas cosas mientras el resto de su aplicación aún se está ejecutando. Hay situaciones en las que el sistema simplemente matará el proceso de alojamiento de la actividad sin llamar a este método (ni a ningún otro), por lo que no debe usarse para hacer cosas que están destinadas a permanecer una vez que el proceso desaparece.

fuente

En cambio, anulo onPause () y compruebo el valor de isFinishing () : si es verdadero, libere recursos y realice las acciones necesarias.

Espero que esto se adapte a tu pregunta.

No, el sistema llama automáticamente a onDestroy (). Pero si desea agregar algún código a la función onDestroy (), puede hacerlo utilizando el siguiente código:

@Anular
nulo protegido en Destroy () {
super.onDestroy ();
//Tu codigo
}