Почему в классе Application есть метод onCreate, но нет метода onDestroy

Ответ

Класс Application не имеет метода onDestroy, потому что процесс приложения может быть завершен системой в любой момент без вызова этого метода. Android управляет жизненным циклом процессов и убивает их при нехватке ресурсов.

onCreate вызывается при создании процесса, но onDestroy не гарантирован, так как:

  1. Система может убить процесс без предупреждения.
  2. Приложение может быть выгружено в фоне без уведомления.

Для очистки ресурсов лучше использовать другие механизмы:

  • Activity.onDestroy() для UI-компонентов.
  • Service.onDestroy() для сервисов.
  • ContentProvider или ViewModel для данных.

Пример:

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        // Инициализация библиотек
    }
    // Нет onDestroy!
}

Ответ 18+ 🔞

Ну вот, объясняю на пальцах, почему в классе Application нету никакого onDestroy. Представь себе, что твой процесс в Android — это такой чувак, который зашёл в бар. Он может спокойно сидеть, пить пиво (это onCreate), но в любой момент вышибала-система может взять его за шкирку и выкинуть на мороз, даже не дав допить и не попрощавшись. Вот и вся философия.

onCreate — это когда процесс родился и говорит: «Ёпта, я живой!». А onDestroy — это как красивое прощание «до свидания», которого никогда не будет, потому что система просто возьмёт и впендюрит процесс в нирвану, когда ей понадобятся ресурсы. Доверия к тому, что тебя предупредят, — ноль ебать. Просто бах — и ты уже на том свете.

Поэтому сидеть и ждать onDestroy в Application — это всё равно что ждать, когда мартышка в зоопарке начнёт говорить с тобой на латыни. Хуй с горы дождёшься.

Для нормальной уборки за собой надо использовать другие крючки, которые хотя бы немного предсказуемы:

  • Activity.onDestroy() — когда закрывается окно (активность).
  • Service.onDestroy() — когда сервис сворачивают.
  • Для данных — всякие ContentProvider или ViewModel, они умнее в этом плане.

Смотри, как это выглядит в коде, ни хуя сложного:

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        // Тут инициализируешь свои библиотеки, типа как разлил пиво по стаканам.
    }
    // А метода onDestroy тут НЕТУ И НЕ БУДЕТ! Забудь как страшный сон.
}

Короче, сам от себя охуел, когда это понял, но так уж устроена эта пиздопроебибна система. Не рассчитывай на вежливость, рассчитывай на внезапный пиздец.