Сигнал / событие AboutToQuit в Android

Я новичок в Java и Android и я исхожу из фона Qt/C++ . В Qt есть этот объект QCoreApplication который представляет все приложение и когда этот объект уничтожен, приложение умирает. В Qt есть этот сигнал на QCoreApplication который является QCoreApplication::aboutToQuit который испускается, когда приложение находится в неминуемом процессе закрытия. Это очень удобно, если вы хотите, например, сохранять данные настроек на диск перед закрытием приложения.

Мой вопрос: есть ли аналогичный механизм, похожий aboutToQuit с которым вы можете получить уведомление, когда приложение Android неизбежно закрывается?

РЕДАКТИРОВАТЬ:

Я хотел бы внести некоторые дополнения в мой вопрос после ответа nPn . Мы не можем полагаться на жизненный цикл активности Android, поскольку нам нужна эта информация в библиотеке / SDK, которую мы разрабатываем. Поэтому мы хотим получить уведомление, когда приложение, использующее нашу библиотеку / SDK, закрывается.

Мы разрабатываем SDK для некоторых клиентов для использования в приложениях Android . Подобно этому недостаточно, этот SDK также использует собственный C++ SDK в фоновом режиме, с которым связан через интерфейс JNI .

Конечная цель – получить уведомление на C ++ о том, что приложение уничтожается в Android. Наличие события / сигнала в Android было бы достаточно, поскольку мы могли бы перенаправить информацию на C ++.

Итак, в качестве возобновления слоев: Android App -> Пользовательский Android SDK -> Native C ++ SDK

Если что-то неясно, я отредактирую вопрос дальше

Взгляните на жизненный цикл активности Android здесь

Работа Android работает, а не получает сигнал, который вы реализуете / переопределяете один или несколько методов жизненного цикла, который вызывается на разных этапах. Для настройки вы можете использовать onPause()

Существуют также обратные вызовы уровня приложения и возможность регистрировать свои собственные обратные вызовы, но все они привязаны к жизненному циклу.

Если ваша проблема заключается в том, что вы просто не хотите, чтобы разработчик приложения добавлял код в метод жизненного цикла, у вас всегда есть выбор подкласса и добавление собственного кода до / после вызова метода суперкласса.

Я просто читал некоторые из последних разработок (в последнее время я не слишком много программировал для Android и хотел узнать больше о новой рекомендованной архитектуре).

Когда я прочитал следующее, я подумал об этом вопросе несколько дней назад.

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

Общим примером является реализация действий зависимых компонентов в методах жизненного цикла действий и фрагментов. Однако эта закономерность приводит к плохой организации кода и распространению ошибок. Используя компоненты, совместимые с жизненным циклом, вы можете переместить код зависимых компонентов из методов жизненного цикла и самих компонентов.

Я думаю, что если какой-либо компонент в вашей библиотеке может реализовать интерфейс LifeCycleObserver , вам не нужно будет полагаться на обратные вызовы в действиях, фрагментах и ​​т. Д., А вы могли бы наблюдать изменения в своих собственных объектах и ​​соответственно реагировать.

Например, если вы создаете класс, который реализует LifecycleObserver , например.

 class LifeCycleMonitor(private val lifeCycleOwner: LifecycleOwner) : LifecycleObserver { init { lifeCycleOwner.lifecycle.addObserver(this) } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroyEvent() { println("activity was destroyed") } } 

а затем создать экземпляр класса в объекте, который является LifecycleOwner (например, Activity), будет вызван метод, аннотированный соответствующим событием.

 class MainActivity : AppCompatActivity() { private val lifeCycleMonitor = LifeCycleMonitor(this) } 

Обратите внимание, что есть также ProcessLifecycleOwner, который может быть еще ближе к тому, что вы ищете, поскольку он охватывает все приложение, а не только данный Activity или Fragment.