performActionForShortcutItem

performActionForShortcutItem

因此,我有一个具有服务器状态的应用程序,并按超时值刷新它,并在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
}

09-19 03:47