当我打开我的应用程序&做一些事情(说导航到某些
ViewController
),然后我几乎没有触摸应用程序iPhone被锁定(应用程序进入BackGround State)
。
现在很少
分钟(约5分钟)当我解锁iPhone我的应用程序被杀死。它
在开放状态(Active State
)中不存在。我需要通过单击App Icon明确打开它。
BackGround State
答案 0 :(得分:2)
如果您正确检查了应用程序没有崩溃,它会在多任务处理UI中显示,而您不是executing code in the background,那么我会说您的应用程序正在被系统终止(由于内存)压力或其他)。
应用程序必须准备好终止,以便随时发生 不要等待保存用户数据或执行其他关键任务。 系统启动的终止是应用程序生命周期的正常部分。 系统通常终止应用程序,以便它可以回收内存和 为用户启动的其他应用程序腾出空间,但系统 也可以终止行为不端或不响应的应用 事件及时发生。
暂停的应用在终止时不会收到通知;该 系统终止进程并回收相应的内存。如果 应用程序当前正在后台运行而不是暂停, 系统先调用其app代理的
applicationWillTerminate:
终止。
所以在你的场景中发生的事情是应用程序进入暂停状态,经过一段时间(你提到的那5分钟)后,系统终止了应用程序。
看看Background Transition Cycle。
如果您希望降低因内存压力导致应用终止的可能性,请查看What to Do When Your App Enters the Background,具体来说:
根据需要释放内存。释放您不需要的任何缓存数据 并做任何可能会减少应用程序内存的简单清理 脚印。具有大内存占用的应用程序是第一个 由系统终止,因此释放图像资源,数据缓存和 您不再需要的任何其他对象。有关更多信息,请参阅 减少你的记忆足迹。
答案 1 :(得分:0)
确保功能选项启用了后台模式(我已经在导航应用上工作,并且在后台保持app活动超过8小时以进行跟踪) 在目标C中实现以下代码
- (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;
}];
}