如何知道我的应用程序被杀死的原因
Posted
技术标签:
【中文标题】如何知道我的应用程序被杀死的原因【英文标题】:How to know the reason my app is killed 【发布时间】:2014-06-24 16:19:52 【问题描述】:我正在为 iOS 7.0+ 制作后台跟踪 GPS 应用。
我在后台跟踪位置时遇到问题,它会在 5 分钟后被杀死,即使我们在高速公路中间,每秒 1 个位置也是如此。它在持续处于活动状态时不会被杀死。
这似乎只发生在 ios 7.0 版本上,而不是更高版本。
我已经注册了 plist 位置后台活动。
我需要最大的准确性和最短的更新时间,所以我不使用显着更改方法,而是使用基本的startUpdatingLocation
。此应用程序主要用于插入车内(电池不留情面)。
我将位置委托设置为应用委托,因此它不太容易被释放。
即使所有这些都完成了,仍然不可能让这个应用在后台运行超过 5 分钟。
我正在与 iOS 作斗争,它总能找到终止我的应用程序的方法,即使应用程序状态恢复也是如此。
所以问题是,有没有办法知道我的应用程序为什么被杀死?
对我没有帮助或没有响应我的需求以及我已经访问过的线程列表:
How to keep GPS app running in background without pauses iOS Multi-Tasking Track GPS Location Periodic iOS background location updates
【问题讨论】:
您是否在后台使用该位置? (例如缓冲它,然后将其写入文件系统),还是仅使用该位置在地图上显示某些内容(因为在后台不可见) 您的应用是被终止了还是崩溃了? 它实际上已终止,因为我没有崩溃报告(HockeyApp)。我在后台不写入任何缓冲区或系统文件,只是在数组中插入位置。我应该使用延迟位置,但由于它可能在不启用延迟位置的设备上运行,我还没有优化代码。 【参考方案1】:系统不会告诉你应用程序被终止的原因。
我将位置委托设置为应用委托,因此它不太容易被释放。
委托对位置管理器是否被释放没有影响。您必须强烈引用位置管理器本身。
【讨论】:
感谢您的回答。我认为解除分配的是委托,而不是位置管理器本身。我需要对位置管理器进行强引用,因为它是单例的,而且我不确定默认情况下类变量是否强大。以上是关于如何知道我的应用程序被杀死的原因的主要内容,如果未能解决你的问题,请参考以下文章
如何在活动的 onSaveInstanceState() 之后杀死所有打开的片段