• 0
Manitikyl

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

Вопросы

Как в FireMonkey Mobile отловить то, что форма находится в скрытом состоянии, ну т.е. пользователь свернул приложение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 ответа на этот вопрос

  • 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 пользователей онлайн

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