FMX.Platform.TApplicationEvent
http://docwiki.embarcadero.com/Libraries/Seattle/en/FMX.Platform.TApplicationEventapp
http://docwiki.embarcadero.com/Libraries/Tokyo/en/FMX.Platform.TApplicationEventide
TApplicationEvent = (FinishedLaunching, BecameActive, WillBecomeInactive, EnteredBackground, WillBecomeForeground, WillTerminate, LowMemory, TimeChange, OpenURL);
An instance of TApplicationEvent may have any of the following values:post
Item | Description | Platform | |
---|---|---|---|
Android | iOS | ||
|
Your application has gained the focus.//applicationDidBecomeActivethis |
Supportedurl |
Supportedspa |
|
The user is no longer using your application, but your application is still running in the background. |
Supported |
Supported |
|
Your application has been launched. |
Supported |
Supported |
|
This warns your application that the device is running out of memory. Your application should reduce memory usage, freeing structures and data that can be loaded again at a later point. |
Supported |
Supported |
|
You application has received a request to open an URL. Application events of this type are usually associated with a context. This context is an instance of the iOS-only
See the iOS API reference documentation for more information. |
Supported |
|
|
There has been a significant change in time. This event might happen for example when the day changes or when the device changes to or from daylight savings time. |
Supported |
|
|
The user is now using your application, which was previously in the background. |
Supported |
Supported |
|
Your application is going to loose the focus. / applicationWillResignActive |
Supported |
Supported |
|
The user is quitting your application. |
Supported |
Supported |
http://codeverge.com/embarcadero.delphi.ios/ifmxapplicationeventservice-not-firing/2028062
http://codeverge.com/embarcadero.delphi.firemonkey/keep-application-on-top/2009583
http://community.embarcadero.com/index.php/blogs/entry/mobile-app-lifecycle-events-handling-in-delphi-xe5-40067
http://codeverge.com/embarcadero.delphi.firemonkey/keep-application-on-top/2009583
FMX.Platform.pas
procedure TMainForm.FormCreate( Sender : TObject ); var SvcEvents : IFMXApplicationEventService; begin if TPlatformServices.Current.SupportsPlatformService ( IFMXApplicationEventService, IInterface( SvcEvents ) ) then SvcEvents.SetApplicationEventHandler( HandleAppEvent ); Application.OnException := ExceptionHandler; end; function TMainForm.HandleAppEvent( AAppEvent : TApplicationEvent; AContext : TObject ) : Boolean; begin case AAppEvent of TApplicationEvent.FinishedLaunching : ; TApplicationEvent.BecameActive : ;//第一次運行app觸發,從後臺切換過來也觸發 TApplicationEvent.WillBecomeInactive : ; TApplicationEvent.EnteredBackground : ;//切換到後臺 TApplicationEvent.WillBecomeForeground : ;//從後臺切換到前臺 TApplicationEvent.WillTerminate : ; TApplicationEvent.LowMemory : ; TApplicationEvent.TimeChange : ; TApplicationEvent.OpenURL : ; end; Result := True; end; //See more at : http://codeverge.com/embarcadero.delphi.firemonkey/keep-application-on-top/2009583
和IOS的對比
/app啓動完畢調用,應用初次啓動 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//進入後臺時調用:通常在這裏保存應用數據(數據,好比暫停遊戲) - (void)applicationDidEnterBackground:(UIApplication *)application
連續點擊兩次Home按鈕
在任務欄點擊SpringBoard或者按下Home按鈕,單次點擊Home按鈕
- (void)applicationWillResignActive:(UIApplication *)application
//程序回到時調用,恢復數據 - (void)applicationWillEnterForeground:(UIApplication *)application //接收內存警告時候調用 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application //程序即將退出 - (void)applicationWillTerminate:(UIApplication *)application
//程序獲取焦點,在任務欄中回到app - (void)applicationDidBecomeActive:(UIApplication *)application
procedure TMainForm.FormCreate(Sender: TObject); var SvcEvents: IFMXApplicationEventService; begin if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(SvcEvents)) then SvcEvents.SetApplicationEventHandler(HandleAppEvent); Application.OnException := ExceptionHandler; end; function TMainForm.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; begin case AAppEvent of TApplicationEvent.FinishedLaunching: ; TApplicationEvent.BecameActive: ; TApplicationEvent.WillBecomeInactive: ; TApplicationEvent.EnteredBackground: ; TApplicationEvent.WillBecomeForeground: ; TApplicationEvent.WillTerminate: ; TApplicationEvent.LowMemory: ; TApplicationEvent.TimeChange: ; TApplicationEvent.OpenURL: ; end; Result := True; end; - See more at: http://codeverge.com/embarcadero.delphi.firemonkey/keep-application-on-top/2009583#sthash.6XM5jEUI.dpuf
跟蹤的時間觸發日誌。
FormCreate
FormShow
BecameActive
FormSaveState
EnteredBackgrounbd
WillBecomeForeground
BecameActive
FormSaveState
EnteredBackgrounbd
WillBecomeForeground
BecameActive
FormSaveState
EnteredBackgrounbd
WillBecomeForeground
BecameActive
function TFMXMusicPlayerFrm.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; var astate: string; begin case AAppEvent of TApplicationEvent.FinishedLaunching: astate := 'FinishedLaunching'; TApplicationEvent.BecameActive: astate := 'BecameActive'; TApplicationEvent.WillBecomeInactive: astate := 'WillBecomeInactive'; TApplicationEvent.EnteredBackground: astate := 'EnteredBackground'; TApplicationEvent.WillBecomeForeground: astate := 'WillBecomeForeground'; TApplicationEvent.WillTerminate: astate := 'WillTerminate'; TApplicationEvent.LowMemory: astate := 'LowMemory'; TApplicationEvent.TimeChange: astate := 'TimeChange'; TApplicationEvent.OpenURL: astate := 'OpenURL'; end;
Result := true; end;
FMX.Platform.iOS.pas
Application delegates
TApplicationDelegate = class{(TOCLocal, UIApplicationDelegate)} private FMainWindow: TFMXWindow; public function application(Sender: UIApplication; didFinishLaunchingWithOptions: NSDictionary): Boolean; overload; cdecl; procedure application(Sender: UIApplication; didReceiveLocalNotification: UILocalNotification); overload; cdecl; procedure application(Sender: UIApplication; didRegisterForRemoteNotificationsWithDeviceToken: NSData); overload; cdecl; function application(const openURL, sourceApplication: string; annotation: Pointer): Boolean; overload; cdecl; procedure applicationDidBecomeActive(const Sender: UIApplication); cdecl; procedure applicationDidEnterBackground(const Sender: UIApplication); cdecl; procedure applicationDidRegisterForRemoteNotificationsWithDeviceToken(Sender: UIApplication; AToken: NSData); cdecl; procedure applicationDidReceiveRemoteNotification(Sender: UIApplication; ANotification: NSDictionary); cdecl; procedure didFailToRegisterForRemoteNotificationsWithError(Sender: UIApplication; AError: NSError); cdecl; procedure applicationDidReceiveMemoryWarning(Sender: UIApplication); cdecl; procedure applicationSignificantTimeChange(Sender: UIApplication); cdecl; procedure applicationWillEnterForeground(Sender: UIApplication); cdecl; procedure applicationWillResignActive(Sender: UIApplication); cdecl; procedure applicationWillTerminate(Sender: UIApplication); cdecl; procedure setWindow(window: UIWindow); cdecl; function window: UIWindow; cdecl; property MainWindow: TFMXWindow read FMainWindow; end;
// Application delegates function applicationDidFinishLaunchingWithOptions(self: id; _cmd: SEL; application: PUIApplication; options: PNSDictionary): Boolean; cdecl; begin Result := PlatformCocoa.FAppDelegate.application(TUIApplication.Wrap(application), TNSDictionary.Wrap(options)); end; procedure applicationDidReceiveLocalNotification(self: id; _cmd: SEL; application: PUIApplication; notification: Pointer); cdecl; begin PlatformCocoa.FAppDelegate.application(TUIApplication.Wrap(application), TUILocalNotification.Wrap(notification)); end; procedure didReceiveRemoteNotification(self: id; _cmd: SEL; app: PUIApplication; ANotification: PNSDictionary); cdecl; begin PlatformCocoa.FAppDelegate.applicationDidReceiveRemoteNotification(TUIApplication.Wrap(app), TNSDictionary.Wrap(ANotification)); end; procedure didFailToRegisterForRemoteNotificationsWithError(self: id; _cmd: SEL; app: PUIApplication; error: PNSError); cdecl; begin PlatformCocoa.FAppDelegate.didFailToRegisterForRemoteNotificationsWithError(TUIApplication.Wrap(application), TNSError.Wrap(error)); end; procedure didRegisterForRemoteNotificationsWithDeviceToken(self: id; _cmd: SEL; application: PUIApplication; deviceToken: PNSData); cdecl; begin PlatformCocoa.FAppDelegate.applicationDidRegisterForRemoteNotificationsWithDeviceToken(TUIApplication.Wrap(application), TNSData.Wrap(deviceToken)); end; procedure applicationOpenURLWithSourceAnnotation(self: id; _cmd: SEL; application: PUIApplication; url: Pointer; sourceApplication: PNSString; annotation: id); var URLString: string; SourceAppString: string; begin if url <> nil then URLString := NSStrToStr(TNSURL.Wrap(url).absoluteString) else URLString := ''; if sourceApplication <> nil then SourceAppString := NSStrToStr(TNSString.Wrap(sourceApplication)) else SourceAppString := ''; PlatformCocoa.FAppDelegate.application(URLString, SourceAppString, annotation); end; procedure applicationDidBecomeActive(self: id; _cmd: SEL; application: PUIApplication); cdecl; begin PlatformCocoa.FAppDelegate.applicationDidBecomeActive(TUIApplication.Wrap(application)); end; procedure applicationDidEnterBackground(self: id; _cmd: SEL; application: PUIApplication); cdecl; begin PlatformCocoa.FAppDelegate.applicationDidEnterBackground(TUIApplication.Wrap(application)); end; procedure applicationWillEnterForeground(self: id; _cmd: SEL; application: PUIApplication); cdecl; begin PlatformCocoa.FAppDelegate.applicationWillEnterForeground(TUIApplication.Wrap(application)); end; procedure applicationWillTerminate(self: id; _cmd: SEL; application: PUIApplication); cdecl; begin PlatformCocoa.FAppDelegate.applicationWillTerminate(TUIApplication.Wrap(application)); end; procedure applicationDidReceiveMemoryWarning(self: id; _cmd: SEL; application: PUIApplication); cdecl; begin PlatformCocoa.FAppDelegate.applicationDidReceiveMemoryWarning(TUIApplication.Wrap(application)); end;