2010-06-15 28 views
0

我有一個應用程序,可以動態生成從6到100個小位圖的任何位置,供用戶在給定會話中圍繞屏幕移動。我目前在onCreate生成它們並將它們存儲到SD卡上,這樣在更改方向後,我可以將它們從外部存儲中取出並再次顯示。但是,這需要時間(加載),我想保持位圖引用在生命週期變化之間,以便更快地訪問。Android - 在哪裏存儲生成的位圖?

我的問題是,有沒有更好的地方來存儲我生成的位圖?我正在考慮在基本活動中創建一個靜態存儲庫,當應用程序完全從內存中移除(關閉,其他應用程序需要資源,重啓30分鐘等)時,只需要重新加載該靜態存儲庫。

理想情況下,我希望用戶能夠退出到標題屏幕,單擊「恢復」按鈕,並在onCreate我只需訪問那些常駐位圖引用,而不必從存儲中加載它們再次。出於這個原因,我不認爲Activity.onRetainNonConfigurationInstance是我需要的。

另外,是否有更好的方法來處理多個生成的位圖比我正在做的或我所描述的計劃?

回答

5

絕對檢查羅曼蓋伊的blog post關於保留方向變化生成的位圖。這聽起來像一個幾乎相同的情況。它的要點是,您可以使用onRetainNonConfigurationInstance/getLastNonConfigurationInstance跨方向相關的活動銷燬傳遞/接收任意對象。但是,這不會幫助您退出並重新開始活動。

你也可以塞進位圖轉換爲一個靜態緩存狀物體(可能是一個SoftReference的HashMap的上Application類),但要​​小心不要保存繪項目或視圖,這可能會導致memory leaks因爲他們引用包含他們的活動。這將持續整個應用程序的生命,但我會盡可能地避免,因爲任何全局狀態都可能導致難看的問題,並且很難找到引用Activity實例的內存泄漏。

+0

我有一種感覺,緩存的想法不會飛。我只會把位圖放在那裏(所以沒有上下文泄漏),但我想我只是需要一些推動正確的方向。看起來像雷泰是當時要走的路。 – Josh 2010-06-15 19:14:29