2013-01-16 29 views
1

我讀過如果我們想要在活動重新啓動(旋轉設備)時保存任何數據,我們必須將所有數據存儲在Bundle的saveInstanceState()中。在saveInstanceState包中存儲大數據結構

但是,如果我們想要在包中保存大數據結構 - 它會凍結系統並增加內存使用量。

例如:
我有一個50,000,000元素。讀數來自SD卡。所以,如果我將HashMap保存到Bundle - 它將設備的旋轉凍結一段非常糟糕的時間。

有沒有一種方法,我們可以在不存儲Bundle的情況下保存數據? (保存指針例如HashMap?)

+0

有趣。如果每個密鑰都是1個字節並且它們都映射爲空,則在大多數設備上已經是OutOfMemoryError。我認爲數據庫將是這些數據的好地方。 – dokkaebi

回答

0

你絕對不應該這樣做。您應手動處理方向更改或將這些數據保存在您的活動之外,例如在服務中。

+0

謝謝,我不考慮服務,但它對我的應用程序非常有用。 – Kirillius

0

首先,在Java中沒有指針,只有引用。但是唯一的一個HashMap不是問題,問題在於節省了它包含的50,000,000個元素。如果你真的想這樣做,你可以優化從文件的讀/寫,檢查this

但是你不應該優化它。正如Donald Knuth所說:

不成熟的優化是萬惡之源。

你應該寫處理屏幕旋轉,不必在旋轉過程中保存和加載如此大的數據。