Когда программа Windows завершает работу, она вызывает обработчики событий, такие как OnClose, OnDestroy и деструктор Destroy. Когда я хочу сохранить некоторые настройки INI, это те места, которые должны быть. Я написал обработчики событий для всех этих событий, но они не обрабатываются, когда я завершаю программу.Как обнаружить завершение программы в Android?
Кто-нибудь знает, где я должен поместить код, который будет выполнен, когда программа Android завершится? Я сильно подозреваю, что это относится и к iOS.
Update
ответ Йохан работает на 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, и это не работает. Приложение не запускается. Это заставляет меня немедленно проверять код на моем планшете, который занимает некоторое время. Жалость.
Спасибо и +1 за ваш разработанный ответ! Я должен проверить его, хотя для Android. Я вернусь, когда мне еще нужно сообщить. Я забыл упомянуть, что я тоже пробовал OnDeactivate безрезультатно. Ваше решение является хорошей заменой для OnDeactivate. – Arnold
Отлично работает! См. Мое обновление для результатов. – Arnold