Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как узнать, что приложение меняет свое состояние?


Manitikyl

Вопрос

Рекомендуемые сообщения

  • 0
  • Администраторы

В XE6 появился специальный сервис для контролирования смены состояния приложения IFMXApplicationEventService. Он позволяет задать свой обработчик на событие смены состояния. Всего поддерживаются следующие типы состояний TApplicationEvent:

  • FinishedLaunching - приложение запущено
  • BecameActive - приложение стало активным, после того, как до этого было свернутым.
  • WillBecomeInactive - приложение будет активировано
  • EnteredBackground - приложение свернулось
  • WillBecomeForeground - приложение будет свернуто
  • WillTerminate - приложение будет завершено
  • LowMemory - Нехватка памяти
  • OpenURL - открытие приложение по ссылке.

1 Способ. Запрос сервиса IFMXApplicationEventService
Соответственно, чтобы узнать о смене состояния нужно:

  • Запросить сервис:
    uses
      FMX.Platform;
    var 
      ApplicationService: IFMXApplicationEventService; 
    begin 
      TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, ApplicationService);
    
  • Создать свой обработчик и задать его при помощи полученного сервиса:
    function TForm1.ApplicationEventChanged(AAppEvent: TApplicationEvent;
      AContext: TObject): Boolean;
    begin
      // Здесь получаем новое состояние приложения
    end;
    
    var
      ApplicationService: IFMXApplicationEventService;
    begin
      TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, ApplicationService);
      if ApplicationService <> nil then
        ApplicationService.SetApplicationEventHandler(ApplicationEventChanged);
    end;
    

2 Способ. Подписка на получение сообщения:
Вместе со сменой состояния платформа FMX осуществляет широковещательную рассылку сообщения о смене состояния: TApplicationEventMessage
Второй способ заключается в подписке на это сообщение:

  • Подписываемся на получение сообщения TApplicationEventMessage:
    uses
      System.Messaging; 
    
    // Подписка
    TMessageManager.DefaultManager.SubscribeToMessage(TApplicationEventMessage, DoApplicationEventChanged);
    
  • Получаем сообщения
    procedure DoApplicationEventChanged(const Sender: TObject; const Message: TMessage);
    begin
    
    end;
    
  • Не забываем отписаться от сообщений, когда это больше уже не нужно:
    // Отписка
    TMessageManager.DefaultManager.Unsubscribe(TApplicationEventMessage, DoApplicationEventChanged);
    
Ссылка на комментарий
  • 0
  • Модераторы

Вообще не рассчитывайте так на фоновую работу приложения без Сервиса. Андроид может завершить ваше приложение в любой момент, система сама решает можно ли оставить приложение в фоне или лучше освободить оперативу.

 

По вашему вопросу:

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

 

Ярослав уже привёл пример такой ловли событий.

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...