Жизненный цикл мобильного приложения более сложный и отличается от настольных приложений. На мобильном устройстве приложение работает либо на переднем плане, либо в фоновом режиме. Если вы программист, то вам может понадобиться отслеживать изменения в состоянии приложения, например для сохранения текущего состояния (настроек и т.п.) приложения, когда приложение уходит в фоновый режим или обновление экрана, когда приложение возвращается на передний план.
Android полностью поддерживает многозадачность. Вы будете удивлены, как много приложений постоянно выполняется на вашем мобильном устройстве. Посмотреть список выполняемых приложений можно при помощи диспетчера задач. На Nexus 7 есть специальная кнопка справа от кнопки "Home", позволяющая увидеть список запущенных приложений.
Android полностью поддерживает многозадачность. Вы будете удивлены, как много приложений постоянно выполняется на вашем мобильном устройстве. Посмотреть список выполняемых приложений можно при помощи диспетчера задач. На Nexus 7 есть специальная кнопка справа от кнопки "Home", позволяющая увидеть список запущенных приложений.
Ознакомиться с описанием жизненного цикла приложения можно здесь: http://developer.android.com/reference/android/app/Activity.html
В Firemonkey(FMX) есть модуль "FMX.Platform". Он содержит определение интерфейса "IFMXApplicationEventService", который позволяет зарегистрировать обработчик события, для получения событий жизненного цикла приложения.
Автор статьи написал простенькое приложение, чтобы увидеть какие события происходят с приложением.
Ниже приведён код всего проекта:
Автор статьи написал простенькое приложение, чтобы увидеть какие события происходят с приложением.
Ниже приведён код всего проекта:
unit Unit11; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts, FMX.Memo, FMX.Platform, FMX.StdCtrls; type TForm11 = class(TForm) Memo1: TMemo; ToolBar1: TToolBar; Label1: TLabel; procedure FormCreate(Sender: TObject); private procedure Log(s: string); public function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; end; var Form11: TForm11; implementation {$R *.fmx} { TForm11 } procedure TForm11.FormCreate(Sender: TObject); var aFMXApplicationEventService: IFMXApplicationEventService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(aFMXApplicationEventService)) then aFMXApplicationEventService.SetApplicationEventHandler(HandleAppEvent) else Log('Application Event Service is not supported.'); end; function TForm11.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; begin case AAppEvent of aeFinishedLaunching: Log('Finished Launching'); aeBecameActive: Log('Became Active'); aeWillBecomeInactive: Log('Will Become Inactive'); aeEnteredBackground: Log('Entered Background'); aeWillBecomeForeground: Log('Will Become Foreground'); aeWillTerminate: Log('Will Terminate'); aeLowMemory: Log('Low Memory'); aeTimeChange: Log('Time Change'); aeOpenURL: Log('Open URL'); end; Result := True; end; procedure TForm11.Log(s: string); begin Memo1.Lines.Add(TimeToStr(Now) + ': ' + s); end; end.
Был проведён эксперимент: Когда приложение запущено на устройстве, переключаемся на другое приложение, а затем обратно на наше приложение. Ниже приведён скриншот планшета Nexus 2013 под управлением Android 4.3 с работающим проектом "LifecycleDemo".
Исходный код проекта "LifecycleDemo" можно скачать с Code Central.
p.s. Это вольный перевод статьи "Mobile app lifecycle events handling in Delphi XE5" (Автор: Paweł Głowacki)