当iOS应用程序在很长一段时间后返回并恢复时,阻止截屏/清除缓存数据

当iOS应用程序在很长一段时间后返回并恢复时,阻止截屏/清除缓存数据,ios,screenshot,Ios,Screenshot,我正在构建一个影院列表应用程序,用户可以在其中向下钻取数据集,最终得到特定电影/影院/等的列表 现在假设用户暂停使用应用程序7天。重新打开应用程序时,他不应该看到7天前的列表。但如果用户只是将应用程序放在后台几分钟,用户应该继续他离开的地方。我想我可以通过在后台运行一段时间后关闭应用程序来解决这个问题。代码如下: static BOOL goingToQuit = NO; #define KILL_IN_BACKGROUND_AFTER_SECS 300 - (void)applicatio

我正在构建一个影院列表应用程序,用户可以在其中向下钻取数据集,最终得到特定电影/影院/等的列表

现在假设用户暂停使用应用程序7天。重新打开应用程序时,他不应该看到7天前的列表。但如果用户只是将应用程序放在后台几分钟,用户应该继续他离开的地方。我想我可以通过在后台运行一段时间后关闭应用程序来解决这个问题。代码如下:

static BOOL goingToQuit = NO;

#define KILL_IN_BACKGROUND_AFTER_SECS 300

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  goingToQuit = YES;

  UIApplication* app = [UIApplication sharedApplication];
  UIBackgroundTaskIdentifier __block bgTask;
  bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
  }];

  if(UIBackgroundTaskInvalid != bgTask) {
    // Start the long-running task to kill app after some secs and return immediately.
    dispatch_after( dispatch_time(DISPATCH_TIME_NOW, KILL_IN_BACKGROUND_AFTER_SECS * 1e09), 
      dispatch_get_main_queue(), ^{
        if(goingToQuit) exit(0);
        [app endBackgroundTask: bgTask];
      });
  }
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
  // cancel ongoing background suicide.
  goingToQuit = NO;
}
我在我的设备上看到的是:在背景中杀死应用程序后,应用程序被杀死。重新启动后,设备日志显示应用程序获得了一个新的PID、显示重新启动的条目等。但是,设备不会显示default.png启动图像,而是显示用户之前所在位置的屏幕截图

另一方面,如果用户在重新启动应用程序之前明确地终止了应用程序(双击home按钮、点击并按住、点击应用程序),则应用程序将以默认的.png启动屏幕启动。这是我在以编程方式终止应用程序时想要的行为

有人知道如何做到这一点吗?任何想法都将受到高度赞赏


顺便说一句:作为一种解决方法,我尝试在ApplicationIdentinterBackground期间隐藏主窗口,并在applicationWillEnterForeground上再次显示它。但是,当用户在应用程序之间切换时,这会让用户非常困惑。

在应用程序代理的
applicationidenterbackground
中,您可以在其余视图前面显示一个视图,操作系统将抓取该视图作为最后可见的内容,并且当应用程序再次激活时(如果它仍然处于活动状态)将显示该视图


在应用程序代理的
applicationIDBecomeActive
中,您可以检查数据是否需要更新;如果不是,则只需关闭视图(动画很好),如果是,则首先更新(或清除)数据,然后关闭视图


这在应用程序中相当常见。许多人只使用default.png启动图像,因为用户习惯于在应用程序正常启动时看到它。

可能只是多任务处理的转折点?如果用户在(比如)5分钟后返回应用程序,将他送到他离开前所在的地方真的很有帮助。(我知道这个答案已经很晚了,但我在寻找其他东西时碰巧遇到了这个问题。)还是谢谢你!我想我最终还是从视图继承人权限中提取了所有视图,直到我只得到了启动映像,然后在ApplicationIDBecMeactive中,如果它们仍然有效,则将它们推回或丢弃。您的解决方案将以相同的方式结束,但非常简单,谢谢!