Android Activity onDestroy() вызывается не всегда, и если вызывается, выполняется только часть кода
onDestroy() не всегда вызывается. При вызове выполняется только часть кода.
И большую часть времени в LogCat я вижу только сообщение "состояние gps при уничтожении вызывается первым". Это почему?
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");
}
3 ответа
Взгляните на это:
Активность OnDestroy никогда не называется?
И это:
http://developer.android.com/reference/android/app/Activity.html
В принципе, нет никакой гарантии, что onDestroy()
будет вызван, и в некоторых случаях такие процессы, как ваше приложение, будут уничтожены напрямую, в любом случае, минуя вызов метода.
В документации разработчика для Android вы можете увидеть это -
для тех методов, которые помечены как подлежащие уничтожению, после того, как этот метод возвратит процесс, на котором размещена активность, система может быть в любой момент прервана без выполнения другой строки ее кода. Из-за этого вы должны использовать метод onPause () для записи любых постоянных данных (таких как пользовательские изменения) в хранилище.
и onStop() и onDestroy () оба помечены как убиваемые.
Это может быть причиной того, что вызывается только часть кода, написанного в onDestroy (), поскольку процесс может быть уничтожен в любое время после выполнения onStop().
@ Крис ответил правильно, однако ваша проблема, когда вызывается только часть вашего кода, может возникнуть в результате обращения к super.onDestroy()
перед вызовом вашего кода. super.onDestroy()
должен быть вызван в конце, потому что тогда ваш код будет вызван до того, как он будет уничтожен.