应用程序在几分钟内保留在后台时被杀死

时间:2016-02-22 10:30:17

标签: ios objective-c

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

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

  • 我在BackGround State
  • 中没有做任何事情
  • 要添加的另一件事是App不崩溃

2 个答案:

答案 0 :(得分:2)

如果您正确检查了应用程序没有崩溃,它会在多任务处理UI中显示,而您不是executing code in the background,那么我会说您的应用程序正在被系统终止(由于内存)压力或其他)。

Apple's documentation提及:

  

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

     

暂停的应用在终止时不会收到通知;该   系统终止进程并回收相应的内存。如果   应用程序当前正在后台运行而不是暂停,   系统先调用其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;
    }];
}