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