如何知道我的应用程序被杀死的原因

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】:

系统不会告诉你应用程序被终止的原因。

我将位置委托设置为应用委托,因此它不太容易被释放。

委托对位置管理器是否被释放没有影响。您必须强烈引用位置管理器本身。

【讨论】:

感谢您的回答。我认为解除分配的是委托,而不是位置管理器本身。我需要对位置管理器进行强引用,因为它是单例的,而且我不确定默认情况下类变量是否强大。

以上是关于如何知道我的应用程序被杀死的原因的主要内容,如果未能解决你的问题,请参考以下文章

如果 Python 程序被杀死,则自动重新启动它

iOS-关于如何知道应用被杀死并做相应处理

如何在活动的 onSaveInstanceState() 之后杀死所有打开的片段

Android:如何知道高级任务杀手杀死的活动/服务?

即使应用程序在 ios 中被杀死或从后台删除,如何继续更新我的位置?

当 kivy 应用程序被杀死时关闭数据库连接