如何优雅地处理被OS杀死的Android服务?

时间:2013-07-25 10:53:42

标签: android

我有一项服务需要在后台运行很长一段时间。由于通知,前台服务不合适。它需要在后台安静地运行它进行轮询。它已经做到了这一点并且表现得如此。这不是我的问题,这只是一些背景。

当用户终止服务并调用onDestroy()时,数据将保存到数据库中 - 没有问题。此外,当手机关闭时,我有一个广播接收器,它可以监听/关闭屏幕。保存那里也没问题。

问题是由于内存不足导致操作系统杀死服务的时间。该服务被终止,我不相信onDestroy()被调用。如果是,我的数据不会存储。因此,如果服务被终止并且已经运行了一段时间,它收集的所有信息都将丢失。

毕竟,我的问题是:我应该如何优雅地清理资源并保存数据?有没有办法在系统终止我的服务之前运行一些代码来保存我的数据? 我已经考虑过几分钟让我的服务保存到数据库,以减少数据丢失的数量。我不确定这在性能方面有多好。查询可能只会在5分钟的时间段内插入最多30行。可能更少。

我是一个相对较新的Android开发人员,在来这里提出问题之前,我已尽力查找此问题。如果我忽略了某些事情,请道歉。

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您的服务被操作系统杀死,则您的代码无法在此事件上执行,因此您需要在更改后保存数据。

如果事实上,如果后台服务在onStartCommand()中返回Service.START_STICKY_COMPATIBILITY,它将重新启动,这是默认选择,您无需担心它。只需在服务中快速初始化并尽快保存结果。