La actividad de Android onDestroy () no siempre se llama y si se llama solo se ejecuta una parte del código

onDestroy () no siempre se llama. Si se llama, solo se ejecuta una parte del código.
Y la mayor parte del tiempo en LogCat solo veo el mensaje “gps state on destroy called first”. ¿Porqué es eso?

protected void onDestroy(){ super.onDestroy(); Log.d("on destroy called", "gps state on destroy called first"); editor.putBoolean("gpsOn", false); Log.d("on destroy called", "gps state on destroy called second"); editor.commit(); Log.d("on destroy called", "gps state on destroy called third"); stopRouteTracking(); Log.d("on destroy called", "gps state on destroy called fourth"); } 

Mira esto:

Actividad OnDestroy nunca se llama?

Y esto:

http://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29

Básicamente, nunca hay una garantía de que se onDestroy() , y en algunos casos los procesos como su aplicación se eliminarán directamente, evitando de todos modos la llamada al método.

En la documentación del desarrollador de Android aquí , puedes ver que:

para aquellos métodos que están marcados como desechables, después de que el método retorne, el sistema puede matar el proceso que aloja la actividad en cualquier momento sin que se ejecute otra línea de su código. Debido a esto, debe usar el método onPause () para escribir datos persistentes (como ediciones de usuario) en el almacenamiento.

y onStop () y onDestroy () ambos están marcados como killable.

Esta puede ser la razón por la que solo se llama a una parte del código escrito en onDestroy () ya que el proceso puede destruirse en cualquier momento después de que se ejecute onStop ().

La respuesta de @ Chris es correcta, sin embargo, su problema donde solo se llama parte de su código puede surgir de la llamada a super.onDestroy() antes de llamar a su código. debe llamarse a super.onDestroy() al final porque luego se llamará a su código antes de que se destruya.