2012-02-28 76 views
2

我已經編寫了一個應用程序來創建一個地圖活動。從那裏用戶可以切換到菜單並返回到地圖活動。經過這些循環的約10%,出現以下錯誤:Android內存泄漏?位圖超過VM預算錯誤與MapView

02-28 21:35:54.780: E/AndroidRuntime(23502): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

我試過這裏http://www.alonsoruibal.com/bitmap-size-exceeds-vm-budget/和其他各種主題提出的解除綁定可繪製解決方案,但沒有幫助。

唯一有幫助的是通過finish()手動關閉地圖活動,但這會導致不自然的導航行爲。

這裏是我的代碼:

MapActivity類

public class TestMapsForgeActivity extends MapActivity { 

View mapView; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mapView = new MapView(this); 
} 

@Override 
public boolean onCreateOptionsMenu(android.view.Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.map_menu, menu); 
    return true; 
}; 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    startActivity(new Intent(getApplicationContext(), MenuActivity.class)); 
    return true; 
} 
} 

MenuActivity類

public class MenuActivity extends Activity { 
@Override 
public boolean onCreateOptionsMenu(android.view.Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_menu, menu); 
    return true; 
}; 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    startActivity(new Intent(getApplicationContext(), TestMapsForgeActivity.class)); 
    return true; 

} 

} 

我不明白的是,垃圾回收器顯然不破壞MapActivity除非正確我用finish()關閉它。但是當應用程序需要更多內存時,不應該由android本身調用finish()。

有沒有人在這個問題上有一些想法?

在此先感謝!

回答

2

我認爲問題在於你正在開始一個活動而不是另一個未關閉的活動。

試試這個:

Intent i = new Intent(getApplicationContext(), TestMapsForgeActivity.class); 
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(i); 

設置意向標誌CLEAR_TOP,將完成別人以前activitys,在這裏閱讀更多:http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

+0

非常感謝,這有助於。 – Damnum 2012-02-29 20:26:12