使用应用程序切换器或主屏幕检测iOS应用程序是否已恢复?

时间:2014-07-11 18:17:31

标签: ios objective-c cocoa-touch ios7

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

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

applicationWillEnterForegroundapplicationDidBecomeActive

正如您所料。

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

修改

为了澄清我想点击主屏幕图标似乎,就像应用程序已经开始新鲜一样,即使它可能已被暂停。

1 个答案:

答案 0 :(得分:1)

我相信你真的试图检测:

  1. 是拳头发射-vs .-
  2. 我的应用已在运行。
  3. 这种方法存在一个固有的问题:与Android不同,会话模糊,应用程序通常在后台运行,iOS会将所有应用程序的状态隐藏到用户:一旦启动,它就会永久存在于用户快速应用切换列表。在此之前,用户显式会从该列表中删除该应用(*)。

    (*)即便如此,对您的应用程序的影响差异很大;如果你的应用程序正在运行,那么它会退出。但是你的应用程序可能早就停止了,以防iOS需要为另一个最前端的应用程序回收内存。就在那里,你被束缚以获得不一致。

    (**)此外,Springboard也是如此。如您所知,该应用可能已在运行。

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

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

    VS

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

    还有更多。

    您对启动的确切程度有一定的了解(例如,来自网址或其他应用)。请参阅UIApplicationLaunchOptionsURLKey以及-application:didFinishLaunchingWithOptions:提供的所有其他内容。

    最后,许多应用程序每次将它们带到forground时都会显示一个闪屏。由于在下一次更新时,在iOS上工作通常脆弱并绑定到 break ,您可能只想这样做。全程更少的代码,更强大的一致性。