2013-02-07 38 views
0

我需要存儲Android應用程序的複選框狀態數量和可變數量。 每5-10分鐘我需要檢索一個複選框的狀態(應該通過其他活動中的用戶交互來更改)。 我知道我可以將它們存儲在sharedPreferences或SQLite數據庫中。數字或複選框從10到(infinite-1)可變。在DB或pref中保存信息的性能/內存消耗

我的第一個想法是所有狀態存儲在一個單一的字符串:

chk1:true,chk2:false,chk3:false,chk4:false,chk5:true 

通過:,分隔。我可以在一個getString()調用中檢索我的所有複選框。

我離開了這個解決方案,因爲我的複選框數量在增長,我認爲它沒有執行一個包含數千個數據的字符串。

我的第二個想法是將每個chk存儲在不同的首選項中。我離開這個解決方案,因爲我需要檢索可能多次我的複選框狀態..想象getString()調用10000次或更多次,這是資源的浪費。

我的第三個想法是將所有單一狀態存儲在SQLite數據庫中。

ID Status 
    1  T 
    2  F 
    3  F 
    4  F 
    5  T 

在這個解決方案中,我不喜歡我需要訪問我的數據庫大量的時間。

如果我需要從現在到無限每5分鐘檢索一個複選框狀態,最好的解決方案(性能和內存消耗)是什麼? DB或sharedpref? 如果數據庫,我需要打開每一個數據庫並實例化一個遊標,或者我應該在我的活動開始時實例化它?

回答

1

我一定會用SQLite。

共享首選項和SQLite都有緩存機制,但SQLite是專門爲檢索和存儲大量數據而設計的,而共享首選項更適合於簡單的應用程序...以及...偏好。

此外SQLite特別有用,如果您的數據模型有變化(並相信我,這一直髮生)。 SQLite還會緩存一些最常用的數據片段(技術上說:數據庫頁面) - 它將適應數據的實際使用模式。

至於打開數據庫 - 我肯定會建議打開它一次並重復使用您創建的連接多次 - 這將節省您每次打開數據庫的開銷(這是一個代價高昂的操作),並且還允許SQLite根據實際使用方式學習(適應)如何緩存數據(例如,訪問順序,特定的SQL語句緩存等)

+0

謝謝。是否有任何負面的問題打開數據庫連接,並永遠關閉它(從不〜2-3天)? – StarsSky

+0

最重要的是總是優雅地關閉所有的遊標。其餘的並不重要,但我只是建議關閉你的'Activity'的連接'onDestroy()'以保證安全。話雖如此,我懷疑Android會保持你的活動在內存中很長時間(因爲它會在需要內存時自動銷燬它),除非你的活動始終保持在前臺,在這種情況下它會真的儘量不銷燬它。 – andr

+0

不,它是一個動態壁紙,所以活動在'前景'中打開並運行。我會嘗試這個解決方案。 – StarsSky