应用程序在BackGround中保留几分钟后就会被杀死

  • 当我打开我的应用程序并做一些事情(说导航到某些ViewController ),然后我没有触摸应用程序几分钟iPhone被锁定(应用程序进入BackGround State)

  • 现在几分钟后(大约5分钟)当我解锁iPhone我的应用程序被杀死。它不在打开状态( Active State )。 我需要通过单击App Icon来明确打开它。

  • 我在BackGround State没有做任何事情
  • 还有一件事要补充:App不是Crashing

如果您正确检查了您的应用程序没有崩溃,它会显示在多任务UI中并且您没有在后台执行代码 ,那么我会说您的应用程序正在被系统终止(由于内存压力或其他原因) 。

Apple的文档提到:

应用程序必须随时准备好终止,并且不应等待保存用户数据或执行其他关键任务。 系统启动的终止是应用程序生命周期的正常部分。 系统通常终止应用程序,以便它可以回收内存并为用户启动的其他应用程序腾出空间,但系统也可以终止行为不端或未及时响应事件的应用程序。

暂停的应用在终止时不会收到通知; 系统终止进程并回收相应的内存。 如果某个应用当前正在后台运行且未暂停,则系统会在终止之前调用其应用委托的applicationWillTerminate: .

所以在你的场景中发生的事情是应用程序进入暂停状态,经过一段时间(你提到的那5分钟),应用程序被系统终止。
看一下背景转换周期 。

如果您想降低因内存压力导致应用程序终止的可能性,请查看应用程序进入后台时应采取的措施,具体如下:

根据需要释放内存。 释放您不需要的任何缓存数据,并进行任何可能减少应用程序内存占用的简单清理。 具有大内存占用的应用程序是第一个被系统终止的应用程序,因此释放图像资源,数据缓存以及您不再需要的任何其他对象。 有关更多信息,请参阅减少内存占用。

在目标C实现以下代码中,确保从function选项(我已经在导航应用程序中工作并在后台保持应用程序活动超过8小时以进行跟踪)启用后台模式

 - (void)backgroundCleanDisk { Class UIApplicationClass = NSClassFromString(@"UIApplication"); if(!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) { return; } UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ // Clean up any unfinished task business by marking where you // stopped or ending the task outright. [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; // Start the long-running task and return immediately. [self cleanDiskWithCompletionBlock:^{ [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; }