如何防止我的应用在iPhone后台运行

3

当按下Home键时,有没有一种方法可以使应用程序退出而不是进入后台?出于安全原因,如果应用程序不在后台运行而实际上关闭,则会更好。这不是为了用户的安全,而是为了应用程序中的公司数据,因此这不是用户的选择。我找不到除了强制退出之外的任何退出方法,但苹果不鼓励这样做。


有UIApplicationExitsOnSuspend,但是你可以在applicationDidEnterBackground:应用程序委托方法中清除任何身份验证信息,并在应用程序返回前台时强制用户重新登录。 (applicationDidBecomeActive:) - Joost Schuur
3个回答

10

请参考iPhone应用程序开发指南中关于退出后台执行的内容:opting out of background execution

如果不希望你的应用程序在退出时继续在后台运行,可以通过在应用程序的Info.plist文件中添加UIApplicationExitsOnSuspend键并将其值设置为YES来明确选择退出后台执行模式。

当应用程序选择退出后台执行模式时,它会在未运行、非活动和活动状态之间循环,并且永远不会进入后台或挂起状态。

当用户点击Home按钮退出应用程序时,应用程序委托的applicationWillTerminate:方法被调用,应用程序有大约五秒钟的时间进行清理和退出操作,然后再被终止并移回未运行状态。


3
只需打开您的项目的 info.plist 文件,并将“应用程序不在后台运行”选项设置为 YES 即可。

0

很遗憾,在尝试了所有方法之后,我仍然无法在按下主页按钮时看到我的应用程序退出。即使在 plist 文件中 UIApplicationExitsOnSuspend 为 YES 且类型为布尔值,并且我已从模拟器中删除了应用程序,重启了 Xcode 和模拟器并尝试了所有建议的方法。

最终,我开始调试应用程序,并发现有一个函数阻止应用程序退出。这个函数非常简单,它从网络上下载一些图像,并从 appDelegate 文件的 applicationDidFinishLaunching 中调用。这个函数将创建网络连接和下载数据的任务委托给其他可重用类,在那里我有以下代码:

if(isBackgroundProcessingSupported){
        appDelegate.bgTask = [app beginBackgroundTaskWithExpirationHandler:^{}];
        [NSURLConnection connectionWithRequest:request delegate:self];
    }

最终发现以上代码是导致按下Home键应用程序进入后台的原因。当我注释掉以上代码后,我的应用程序退出而不是进入后台。

注意:早期应用程序支持后台处理时已经存在该代码。

希望这能帮助像我一样苦苦寻找原因的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接