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() должен быть вызван в конце, потому что тогда ваш код будет вызван до того, как он будет уничтожен.

Другие вопросы по тегам