因此,我有一个具有服务器状态的应用程序,并按超时值刷新它,并在applicationWillEnterForeground
中检查该超时,如果超时已过期,则重新加载。
到目前为止,效果一直很好。
现在,我想实现执行服务器操作的新的强制触摸快捷方式操作。但是,我不希望状态获取操作与快捷方式操作同时发生。通过快捷方式启动应用程序时,这不是问题,但是从非 Activity 状态-> Activity 状态转换时,我可能最终在applicationWillEnterForeground
中启动一个服务器操作,在performActionForShortcutItem
中启动另一个服务器操作,这不是最佳选择。
我所追求的是,如果由于强制触摸而未(重新)启动应用程序,则仅可能刷新我的状态。
我以为我可以通过在performActionForShortcutItem
中设置的“isHandlingShortcut”布尔值来解决此问题,然后签入applicationWillEnterForeground
,在这种情况下,请跳过刷新-但事实证明,由于首先调用了applicationWillEnterForeground
,它不起作用!
有什么方法可以通过applicationWillEnterForeground
中的快捷方式发现我(重新)启动了该应用程序吗?
编辑:也许我可以将我的“刷新”逻辑移至applicationDidBecomeActive
?那个在performActionForShortcutItem
之后被调用。
最佳答案
根据文档:
[...]启动时检查您的应用是否通过快速启动
行动。在您的计算机中执行此检查
应用程序:willFinishLaunchingWithOptions:或
application:didFinishLaunchingWithOptions:方法,方法是检查
UIApplicationLaunchOptionsShortcutItemKey启动选项键。的
UIApplicationShortcutItem对象可以用作
启动选项键。
https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622935-application
我正在做的是检查didFinishLaunchingWithOptions
中的快捷方式,因此稍后在performActionForShortcutItem
中,我知道该应用程序是由于该快捷方式而启动还是已启动。
在didFinishLaunchingWithOptions
中(如果shourtcut启动应用程序则执行):
self.launchShortcutItem = launchOptions[UIApplicationLaunchOptionsShortcutItemKey];
然后在
performActionForShortcutItem
中:if (self.launchShortcutItem) {
// app launched due to shortcut
} else {
// app was already launched
}