是否可以在Android应用程序关闭之前保存到数据库?

时间:2013-06-11 18:55:47

标签: android database sqlite ondestroy

在我正在编写的Android库中,我有一个队列,其中的元素不断排队并出列。必需的规范是队列中没有元素丢失。因此,如果应用程序关闭,我必须以某种方式保存队列。

我有两个选择:

1)理想情况下,我可以在应用程序关闭时将队列保存到SQLite数据库中。但是,我不确定如何检测到这一点,或者即使它是可能的。通过这种方式,我可以在下次应用程序打开时重新加载从未出列的队列元素。如果有人可以告诉我如何从库(而不是活动)中检测到应用程序,那将非常有帮助。

2)如果那是不可能的,我可以将队列直接写入数据库以进行每次插入和删除。但是,这非常低效,对我的图书馆来说太慢了。

处理此问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

  

因此,如果应用程序关闭,我必须以某种方式保存队列。

将条目添加到队列时更新持久性存储。例如,Square's Tape提供持久性队列实现。

  

但是,我不确定如何检测到这一点,或者即使它是可能的。

这是不可能的。 Android对“应用程序关闭”的最接近的事情是该进程终止时,并且您不会提前通知您。

  

然而,这非常低效,对我的图书馆来说太慢了。

适用于Square。 Their app已被下载数百万次,并且在Play商店中获得了约4.5星评级,并使用了磁带。

请注意,AFAIK磁带不会写入SQLite。

答案 1 :(得分:1)

您无法检测Application何时关闭,但此工作应在Service中完成,您可以在其中覆盖onDestroy()方法。

答案 2 :(得分:0)

在onPause事件中,执行以下操作

if (isFinishing()) // This tells you the app is closing.

仅在这种情况下保存。