Как обнаружить завершение программы в Android?

Когда программа Windows завершает свою работу, она вызывает обработчики событий, такие как OnClose, OnDestroy и деструктор Destroy. Когда я хочу сохранить некоторые настройки INI, это места, где можно быть. Я написал обработчики событий для всех этих событий, но они не обрабатываются, когда я завершаю программу.

Кто-нибудь знает, где я должен разместить код, который будет выполняться, когда программа Android завершается? Я сильно подозреваю, что это относится и к iOS.

Обновить

Ответ Йохана работает и для Android, хотя реальность несколько сложнее, чем его примеры. Приятно то, что это заставило меня принять участие в TApplicationEvents, о чем я никогда не слышал. Как обычно, Embarcadero не задокументировано, но код FMX.Platform достаточно интересен. Определено несколько ApplicationEvents, три из которых представляют интерес: aeEnteredBackground, aeWillBecomeInactive и aeWillTerminate. Поскольку они не задокументированы, я предположил, что они сделали то, что предлагали их имена: сигнализируя о том, что фоновое состояние достигнуто, что оно начнет переходить на задний план и что оно (очень) скоро прекратится. Я адаптировал код Йохана следующим образом:

  function TForm2.AppEvent (AAppEvent: TApplicationEvent; AContext: TObject) : Boolean;
  begin
  // do something here for when the app is sent to background
     case AAppEvent of
     (1)   TApplicationEvent.aeEnteredBackground:  ;// Something for OnDeactivated
                                                    // which does not exist
     (2)   TApplicationEvent.aeWillBecomeInactive: if Assigned (OnDeactivate)
                                                      then OnDeactivate (Self);
     (3)   TApplicationEvent.aeWillTerminate:      if Assigned (OnClose)
                                                      then OnClose (Self);
     end; // case
     Result := True; // let iOS/Android know it worked...
  end; // AppEvent //

Когда я маркирую события 1, 2 и 3, эксперименты с отладчиком показали следующее: принудительное приложение к фону генерирует последовательность событий: 2, 1, 1, 2. Как только я даже получил 2, 2, 1, 1, 2, 2. Если ваш код должен быть выполнен один раз, тогда примите меры предосторожности. Но лучше: aeWillTerminate делает то, что рекламирует: посылает сигнал, когда приложение закрывается. Время для этого, вероятно, будет коротким, и я проверю, достаточно ли написать TIniFile.

Я пробовал этот код в Win32, и это не работает. AppEvent не запускается. Это заставляет меня немедленно проверить код на моем планшете, что занимает некоторое время. Жалость.

Ответы на вопрос(2)

Ваш ответ на вопрос