Android内存泄漏?使用MapView,位图超出了VM预算错误

时间:2012-02-28 20:50:46

标签: android memory-leaks bitmap android-mapview

我编写了一个创建地图活动的应用程序。用户可以从那里切换到菜单并返回到地图活动。在大约10个循环之后,发生以下错误:

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

我已尝试过这里提出的unbind drawables解决方案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 Class

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()关闭它。但是,只要应用程序需要更多内存,它就不应该自己调用finish()吗?

有没有人对这个问题有所了解?

提前致谢!

1 个答案:

答案 0 :(得分:2)

我认为问题在于你正在开展一项未被关闭的活动。

试试这个:

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

设置Intent标志CLEAR_TOP,将完成其他以前的活动,请在此处阅读更多内容:http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP