OnDestroy no siempre se llamará. De los documentos del ciclo de vida:
Cuando tu actividad recibe una llamada al método onStop(), ya no está visible y debería liberar casi todos los recursos que no son necesarios mientras el usuario no los usa. Una vez que se detiene su actividad, el sistema podría destruir la instancia si necesita recuperar la memoria del sistema. En casos extremos, el sistema podría simplemente eliminar el proceso de su aplicación sin llamar a la devolución de llamada onDestroy() final de la actividad, por lo que es importante que use onStop() para liberar recursos que podrían perder memoria.
Aunque el método onPause() se llama antes que onStop(), debe usar onStop() para realizar operaciones de apagado más grandes y con un uso más intensivo de la CPU, como escribir información en una base de datos
ver Detener su actividad