当iOS应用程序得到后台处理并在很长一段时间后恢复时,防止屏幕截图/清除缓存数据

时间:2012-02-18 13:36:56

标签: ios screenshot

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

现在假设用户暂停使用该应用程序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;
}

我在设备上看到的是:在KILL_IN_BACKGROUND_AFTER_SECS之后,应用程序被杀死了。重新启动设备日志后,显示应用程序获得了新的PID,条目显示重新启动等。但设备未显示default.png启动映像,但显示用户之前所在位置的屏幕截图。

另一方面,如果用户明确地杀死应用程序(双击主页按钮,点击并按住,单击 - 应用程序),然后重新启动它,应用程序将以其default.png启动屏幕启动。这是以编程方式杀死应用程序时所需的行为。

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

BTW:作为一种解决方法,我试图在applicationDidEnterBackground期间隐藏主窗口并在applicationWillEnterForeground上再次显示它。然而,当用户在应用程序之间切换时,这对用户来说非常混乱。

1 个答案:

答案 0 :(得分:2)

在您的app delegate applicationDidEnterBackground中,您可以在其余视图前面显示一个视图,操作系统将抓取该视图作为最后一个可见的内容,并且当应用再次激活时将显示该视图(如果是还活着)。

在您的app delegate applicationDidBecomeActive中,您可以检查数据是否需要更新;如果没有那么简单地关闭视图(动画很好),如果是,那么首先更新(或者只是清除)你的数据,然后关闭视图。

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