0

我正在開發一個下載管理器應用程序,我正在使用lingochamp filedownloader library從不同的活動下載文件。Android Filedownloader library:如何維護下載文件的列表/歷史記錄?

在這裏,我想保留已下載文件的歷史記錄,但根據a discussion here,庫不會維護這樣的文件列表。

所以,我想到了填充列表,然後使用Gson將其轉換爲json &使用共享首選項保存它。

每次下載開始,暫停,取消或完成時,json字符串都會轉換回列表,然後列表被更新並保存回json。但是,由於存在多個訪問同一列表的活動,因此可能存在併發問題,這可能會導致數據不一致。

那麼,我應該如何去開發相同的?或者上述方法不正確,還有一些更好的方法可用?

回答

0

當您僅訪問onStart()和onStop()或onResume()/ onPause()之間的首選項時,不應該存在併發問題,因爲只有一個活動可以處於該狀態。所以只有當你使用不同的線程來訪問首選項時纔會發生。即使這樣,我認爲SharedPreferences也許能夠在不做任何修改的情況下處理它。至少我不知道我們遇到過問題。

無論如何。如果您遇到併發問題,您可能需要將SharedPreferences包裝在單例對象中,並訪問歷史對象的同步實例。然後,只要有人添加數據並首先更改您的歷史記錄對象以供其他組件訪問,就可以保存它。然後,在實例化包裝實例時,您只需要從首選項中讀取一次數據。

另外我應該告訴你,你應該使用類似sqlite的東西來保存這些數據,因爲將其保存在首選項中會違背SharedPreferences的意義,並且需要在獲取,更改並保存更改時保存所有數據或添加一個條目。然後,我再也不會否認我多次使用過這種方法,並且對於少量數據工作正常。