在我的應用程序中的幾個Activity
顯示ListView
中的圖像,其中ListView
的每一行都包含ImageView
。對許多本地LruCaches執行全局LruCache
這個例子是一個搜索屏幕,用戶搜索,獲取結果,並顯示每個結果的圖片。
我試圖衡量實施全球LruCache
的成本/收益與每個Activity
包含其本地LruCache
。
這是我的兩個主要問題。兩者都圍繞着這樣的事實:我的應用程序非常大,這意味着有相當多的屏幕顯示這些圖像。此外,我的應用程序有流行的側面菜單的導航方式。因此,我可以打開菜單,點擊Activity B
,打開菜單,點擊Activity A
,打開菜單等等,然後無限期創建一個ABABABABABABABABAB的Activity
堆棧。
全球
不會Activity
s的使用Bitmap
期從全球LruCache
ImageView
小號包含這些Bitmaps
引用?假設用戶通過點擊Button
導航離開Activity
。 Activity
現在在Activity
堆棧上,並且仍然保留對這些Bitmaps
的引用。如果LruCache
彈出一個Bitmap
關閉,當ImageView
在堆棧上的某些Activity
持有對它的引用時,那麼Bitmap
是否真的可以回收?
我以前創建了自己的自定義緩存。如果我在Bitmap
上調用recycle()
,然後用戶點擊返回按鈕返回包含設置爲Bitmap
的ImageView
的堆棧上的某個Activity
,則該應用程序將崩潰。這就是爲什麼我相信ImageView
s在Activity
的堆棧上仍然持有對Bitmap
s的引用。
本地
正如我前面提到的。我的應用程序非常大,導航的側面菜單風格允許用戶創建相當大的堆棧。這將創建很多LruCache
s。而且,由於您在初始化時必須聲明LruCache
的大小,因此似乎沒有任何選擇大小的好方法。
想法?建議?
在這一點上,我認爲我必須做全球,但我不知道如何解決堆棧引用問題Activity
。我無法想象這不是許多應用程序沒有遇到的問題。我不知道爲什麼我沒有找到有關它的信息。
謝謝你的迴應。是否有解決方案:'不能回收位圖內存,因爲還有一些ImageView對它有強烈的參考意義?這似乎是一個問題。也許,在onPause()中,將所有ImageView指向其他圖像? – Andrew 2014-09-03 13:26:38