2013-06-11 64 views
1

在我寫的一個Android庫中,我有一個隊列,它有不斷排隊和排隊的元素。需要的規範是隊列中的元素不會丟失。所以,如果應用程序關閉,我必須以某種方式保存隊列。在Android應用程序關閉之前是否可以保存到數據庫?

我有兩個選擇:

1)理想情況下,我可以在隊列保存到一個SQLite數據庫的應用程序關閉時。但是,我不確定如何檢測到這一點,或者即使可能。通過這種方式,我可以在下次打開應用程序時重新加載從未出隊的隊列元素。如果有人能告訴我如何從庫中檢測應用程序(而不是活動),這將非常有幫助。 2)如果這是不可能的,我可以將隊列直接寫入數據庫,以便每次插入和刪除。然而,這是非常低效的,而且對我的圖書館來說太慢了。

解決此問題的最佳方法是什麼?

回答

3

因此,如果應用程序關閉,我必須以某種方式保存隊列。

當條目添加到隊列時更新持久性存儲。例如,Square's Tape提供了一個持久隊列實現。

但是,我不知道如何檢測這個,或者即使它是可能的。

這是不可能的。 Android最接近「應用程序關閉」的地方在於進程終止時,並且您沒有提前通知。

但是,這是非常低效的,而且對我的圖書館來說太慢了。

它適用於Square。 Their app已被下載數百萬次,並且在Play商店中擁有〜4.5星評級,並且它使用了磁帶。

請注意,AFAIK磁帶不寫入SQLite,但。

1

您無法檢測Application何時關閉,但是此工作應在Service中完成,您可以在其中覆蓋onDestroy()方法。

0

在的onPause事件,請執行以下

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

只有在這種情況下保存。

+1

如果用戶按HOME鍵(活動未完成),然後Android會在一段時間後終止該過程,則這不起作用。 – CommonsWare

+0

我相信這是爲了活動,而不是應用程序。 – bclymer

+0

我知道這是爲了活動,但是如果他在這個階段將數據保存到數據庫中,他會是安全的。在OnPause之後,其他事件可能不會被調用,並且如果操作系統認爲有必要,整個應用程序可能會被終止。 – neo

相關問題