【问题标题】:Detect if iOS application was resumed with application switcher or from homescreen?检测 iOS 应用程序是通过应用程序切换器还是从主屏幕恢复的?
【发布时间】:2014-09-02 10:47:39
【问题描述】:

我需要检测用户是从主屏幕还是从应用程序切换器恢复我的应用程序。这在 Android 上很容易,但在 iOS 上我遇到了同样的行为。

在这两种情况下,两个委托方法都会被调用

applicationWillEnterForegroundapplicationDidBecomeActive

如你所料。

如果出现“行为不应该有差异”之类的答案:我的应用在从主屏幕打开时应该显示一个菜单(打开“新鲜”),但在切换回时应该恢复。

编辑:

为澄清起见,我想在主屏幕图标上轻按一下似乎就像应用程序重新启动一样,即使它可能已被暂停。

【问题讨论】:

  • 我非常怀疑能否做出这种区分。是的,我很好奇你为什么要这样做。

标签: ios objective-c cocoa-touch ios7


【解决方案1】:

我相信您真正想要检测的内容:

  1. 是拳头发射吗-vs.-
  2. 我的应用是否已经在运行。

这种方法存在一个固有问题:与 Android 不同,Android 会话是模糊的,应用程序通常在后台运行,iOS 向用户隐藏所有应用程序的状态:一旦启动,它几乎永久存在于快速应用切换列表。直到,即用户明确从该列表中删除应用程序 (*)。

(*) 即便如此,对您的应用程序的影响也大不相同;如果您的应用程序正在运行,则它会退出。但是你的应用程序可能早就停止了,以防 iOS 需要为另一个最前面的应用程序回收内存。就在那儿,你注定会出现不一致的地方。

(**) 此外,跳板也发生了同样的事情。如您所知,该应用可能已经在运行。

您只能使用以下方法区分新启动和热插拔:

  // Fresh launch
  - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

对比

  // App already running
  - (void)applicationWillEnterForeground:(UIApplication *)application

还有更多。

您对自己的启动方式有一定的了解(例如,从 URL 或其他应用程序启动)。请参阅UIApplicationLaunchOptionsURLKey-application:didFinishLaunchingWithOptions: 提供的所有其他内容。

最后,许多应用程序每次被带到前台时都会显示一个启动画面。由于在 iOS 上工作通常脆弱并且在下一次更新时绑定到break,你可能只想这样做。更少的代码,更高的健壮性和一致性。

【讨论】:

    猜你喜欢
    • 2015-03-01
    • 2015-07-30
    • 1970-01-01
    • 2015-04-29
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2011-10-24
    相关资源
    最近更新 更多