在我的Android應用程序中,我每10秒調用一次服務器請求,並使用標記更新地圖上的結果(創建位圖,我的標記具有圖像&文本)。我使用Android map utils library來創建我的佈局的位圖,這工作正常,但我的力量在一段時間後內存不足問題關閉。Android地圖內存異常
Note:
My marker has image and text like a layout.
its updates with dynamic result by every 10 seconds.
我用了兩個主要的類從library
1. BubbleDrawable 2. IconGenerator,我已經使用這個兩個類來創建我的佈局的位圖。
在我的地圖活動中,我每10秒鐘調用一次庫並使用自定義標記刷新地圖。
代碼:
public class MainActivity extends Activity{
private IconGenerator icGen ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
icGen = new IconGenerator(this);
serverResponse(); // this method call every 10 seconds
} // onCreate ends here.
void updateResult(String placeName){
markerPin = googleMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(icGen.makeIcon(placeName))) // dynamic name
.position(markerLatLng).anchor(0.5f, 1.0f)); // I got out of memory exception here
....
googleMap.addMarker(markerPin);
}
void serverResponse(){
JSONArray arr = new JSONArray(serverResponse);
for(int i=0;i<all.length();i++){
name = arr.getJSONObject.getStrig(name);
updateResult(name);
}
}
}
我也沒辦法解決這個問題,請幫幫我。
當您不再需要標記時,您是否刪除標記,或者在不刪除舊標記的情況下繼續添加新標記? – antonio
我會檢查舊數據和新數據每次從服務器獲取新數據,如果發現任何地方的修改,然後我將刪除舊的標記並創建新的位圖並用作標記,未改變的地方的標記將不會被刪除。 –
然後我會說你的'OutOfMemory'是由於在你的地圖上保留了大量的標記引起的。你真的不需要保留地圖中的所有標記(它會破壞性能),你只需要顯示可見的標記。所以你可以,例如刪除所有的標記('map.clear()')並在onCameraChange事件中添加可見的標記。爲此,您需要維護一個結構來存儲您從服務中下載的位置,並檢查這些位置是否在可見視口中。 – antonio