如何避免iOS应用程序在后台时被系统终止

时间:2016-08-19 10:03:34

标签: ios objective-c iphone memory

我正在构建适用于iOS 8和iOS的iOS应用程序。 9,我面临的问题是,当应用程序进入后台时,系统会在2或3分钟后终止它。

我的测试很简单:

  1. 我从iPhone上删除所有正在运行的应用程序。
  2. 我重启了我的iPhone(以确保没有其他应用程序占用内存)。
  3. 我启动了我的应用。
  4. 我在我的应用程序中什么也没做。
  5. 我按下" Home"按钮,将我的应用程序移动到后台。
  6. 我等不了2分钟或3分钟。
  7. 我再次打开我的应用程序并惊讶,系统终止了它,现在它正在重新启动作为新的启动。
  8. 一些意见:

    • 该应用不在后台使用CoreLocation,也不使用任何其他服务。
    • 我已经对该应用进行了分析,试图了解它是否消耗了太多内存。移动到后台时,它消耗大约25Mb的RAM内存。我在下面附上了截图。
    • 此行为已在iPhone 5,5s,6,6 +上测试过。
    • 在iPhone 6s和6s +似乎需要更多时间才能发生,但仍然会发生。

    App Allocations Profile

    我的问题是:你知道为什么会这样吗?我可能不会考虑或忘记的任何事情?

    我不想通过使用CoreLocation或类似的方法强制我的应用在后台运行。如果系统最终杀死我的应用程序,我还可以。我不想要的是,每当我将我的应用程序移动到后台时,系统都会终止它。

    任何提示或帮助都将受到赞赏。

    谢谢,

3 个答案:

答案 0 :(得分:0)

所有应用程序都会被系统自动杀死

根据Apple文档:

  

应用程序终止

     

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

暂停的应用在终止时不会收到通知; >系统终止进程并回收相应的内存。如果某个应用>当前正在后台运行而未暂停,则系统会在终止之前调用其应用代理的> applicationWillTerminate :. >设备重启时系统不会调用此方法。

     

除了系统终止您的应用外,用户还可以使用多任务UI明确终止>您的应用。用户启动的终止>与终止暂停的应用具有相同的效果。该应用程序的进程已被杀死,并且未向该应用程序发送任何通知。

     

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html#//apple_ref/doc/uid/TP40007072-CH2-SW1

您可以跟踪位置,但您肯定会看到一个蓝色状态栏,表示某个应用程序使用GPS跟踪。

也许您可以尝试使用无声通知在后台“唤醒”您的应用...

如果没有必要保持您的应用程序存活,请相信系统...

答案 1 :(得分:0)

  1. 代码内部出现一些错误。请在运行您的应用程序之前选择debug Navigator ...现在您可以找到错误..

  2. 或者太多记忆也会终止..

答案 2 :(得分:-1)

在后台运行的应用程序会延长电池续航时间,它让您对设备感觉不好,而不是应用程序,因为普通消费者不知道这是一款耗尽电池的应用程序。 因此iOS不允许您的应用在后台运行超过几秒钟。但是有一些例外,应用可以通过声明它启动后台任务来请求扩展。

有关详细信息,请查看以下链接: http://blog.dkaminsky.info/2013/01/27/keep-your-ios-app-running-in-background-forever/

http://www.speirs.org/blog/2012/1/2/misconceptions-about-ios-multitasking.html