2012-09-04 48 views
2

我在通過Google地圖繪製自定義切片時遇到問題。Android MapView與GoogleTileOverlay未釋放位圖

使用GoogleTileOverlayOSMDroid,我繪製在設備SD卡本地存儲的自定義瓷磚。

問題發生在我打開地圖後,然後嘗試返回到其他活動。事情開始變得怪異。 XML中定義的背景顏色沒有顯示出來和其他奇怪的東西。

我已經搜索了很多原因,我所能想到的是沒有足夠的內存?

According to Eclipse MAT有8.4 MB遺留位圖之後我已經摧毀持有MapViewGoogleTileOverlay

讓我知道如果有我可以提供任何其他信息的活動。

+0

同樣的問題在這裏。我嘗試清除Google地圖活動的停滯時間的磁貼緩存,但似乎有些位圖仍然保留在活動引用中,因此在活動被破壞後不會被GCC控制。至今對您的情況有何看法? – plesatejvlk

+0

@plesatejvlk不幸的是,不,我已經迫使應用程序在完成活動後完全重新啓動。我在XML資源上遇到了一些嚴重的顏色問題。仍在尋找更好的解決方案,但現在,它的工作原理。 – MrZander

+0

在MAT中,您是否在幾次活動切換後(在原始解決方案中)看到您的地圖活動的單個實例?特別是LRUMapTileCache?在我的情況下,它是位圖上的緩存(指的是活動),最終導致整個活動泄漏到OOM中。我通過從MapView的疊加列表中刪除疊加層來解決它_before_我在提供程序上調用了clearMapTiles並解決了泄漏問題。但仍然有8 MB的內存,至少只有一次。 – plesatejvlk

回答

1

我正在處理由於位圖發生內存泄漏導致的OOM異常。在地圖活動的工作中,在清除切片緩存之前(以便在清除後沒有創建新的切片)之前,似乎從MapViewOverlay列表中刪除覆蓋圖。無論地圖活動創建/恢復的次數多少,我最終都得到了單個實例LRUMapTileCache

我批次如下:

// .. get custom tiles off the screen first 
mMapView.getOverlays().remove(mCustomTilesOverlay);   
// .. release all custom tiles' bitmaps 
mCustomTilesOverlay.clearTileCache(); 
// .. unregister intent receiver (in order not to leak it) 
mCustomTilesOverlay.detach(); 
// .. indicate not-ready state by clearing the reference 
mCustomTilesOverlay = null; 

8 MB仍然存在,雖然 (見編輯),我使用的android:largeHeap="true"應用屬性來彌補。

編輯

原來的8 MB是來自其他來源。這個緩存被成功清除。

+0

我有點困惑。 'onPause'代碼是否仍然會泄漏內存?如果是這樣,它完成了什麼? 'android:largeHeap'可能是一個選項。下次我有機會時,我會給你一個機會。 – MrZander

+0

@MrZander泄漏消失了,請參閱編輯。 – plesatejvlk

+0

太棒了,下次有機會我會給你一個機會並回報。 – MrZander