2016-08-19 276 views
5

我正在构建iOS应用程序iOS 8 & 9我面临的问题是,当应用程序转到后台系统正在终止它后2或3分钟。如何避免iOS应用程序在后台被太频繁终止

我的测试很简单:

  1. 我杀从我的iPhone上的所有正在运行的应用。
  2. 我重新启动了我的iPhone(以确保没有其他应用程序正在使用内存)。
  3. 我启动我的应用程序。
  4. 我在我的应用程序内没有做任何事情。
  5. 我按下“Home”按钮,将我的应用程序移动到背景。
  6. 我等了2到3分钟不做其他事情。
  7. 我再次打开我的应用程序和惊喜,系统已终止它,现在它重新启动作为新的发射。

一些评论:

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

App Allocations Profile

我的问题是:你知道为什么会这样发生?任何我可能不会考虑或忘记的东西?

我不想强迫我的应用程序使用CoreLocation或类似的东西在后台运行。如果系统最终杀死了我的应用,我很好。我不想要的是,每次我将应用程序移到后台时,系统都会终止它。

任何提示或帮助将不胜感激。

感谢,

+0

的方法添加破发点并看到它再次调用'didFinishLaunchingWithOptions' –

+0

您的应用程序实际在做什么?例如OpenGL调用会让你的应用程序失效。 –

回答

0

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

根据苹果的文档被杀:

应用程序终止

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

挂起的应用程序在终止时不会收到通知; >系统杀死进程并回收相应的内存。如果应用程序>当前正在后台运行并且未挂起,系统将在终止之前调用其应用程序委托的applicationWillTerminate:。 >当设备重新启动时,系统不会调用此方法。

除了系统终止您的应用程序之外,用户还可以使用多任务UI来显式终止>您的应用程序。用户启动的终止>与终止暂停的应用具有相同的效果。该应用程序的进程被终止,并且没有通知被发送到应用程序。

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

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

也许你可以尝试“唤醒”你在后台无声地通知应用程序...

如果没有必要让你的应用程序还活着,相信系统...

+0

感谢您的留言。我大部分已经意识到这一点。我的问题是为什么终止这么快?如果有什么我可以做,以避免这一点。在玩其他应用程序时,我发现有些人需要更多时间才能被系统终止。 – vilanovi

+0

@vilanovi你可以检查它NSLog(@“%f”,[UIApplication sharedApplication] .backgroundTimeRemaining); –

+0

in applicationDidEnterBackground –

-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

+0

我不问关于后台应用程序的执行情况。请在回答之前阅读这个问题。 – vilanovi

+0

亲爱的vilanovi,对于atlandu的回答你评论说,为什么应用程序终止如此之快?对于这个问题,直接的答案是节省电池寿命。对于你的第二个查询是如何避免这种情况?为此,我建议通过提供链接来使用beginBackgroundTaskWithExpirationHandler。 –

+0

是的,的确如此。但问题的本质不是理解如何让应用程序在后台执行,而是试图了解系统为什么以及何时被杀死。 – vilanovi

-1
  1. 有些错误在你的代码中。请应用委托选择调试导航之前运行你的应用程序......现在,你可以找到你的错误..

  2. 或过多的内存也将终止..

+0

我已经意识到这样的问题。在这里,我正在询问关于iOS如何管理后台应用程序的更一般的理解。 – vilanovi

相关问题