安卓内存泄漏?位图超出 MapView 的 VM 预算错误

标签 android memory-leaks bitmap android-mapview

我编写了一个创建 map Activity 的应用程序。从那里,用户可以切换到菜单并返回到 map Activity 。大约 10 次循环后,会出现以下错误:

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

我已经尝试了此处提出的解除绑定(bind)可绘制解决方案 http://www.alonsoruibal.com/bitmap-size-exceeds-vm-budget/以及其他各种线程,但这没有帮助。

唯一有帮助的是通过 finish() 手动关闭 map Activity ,但这会导致不自然的导航行为。

这是我的代码:

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;
}
}

菜单 Activity 类

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() 吗?

有人对这个问题有什么想法吗?

提前致谢!

最佳答案

我认为问题在于您正在开始一项 Activity 而不是另一项未关闭的 Activity 。

试试这个:

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

设置 Intent 标志 CLEAR_TOP,将完成其他之前的 Activity ,请在此处阅读更多信息:http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

关于安卓内存泄漏?位图超出 MapView 的 VM 预算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9489534/

相关文章:

android - 将 ImageView 背景设置为位图

android - SurfaceView 到位图

android - libgdx 和 TWL : Android app force closes on any TWL menu, 在桌面上运行良好

android - 将自定义下拉微调器添加到 Actionbar sherlock 中的操作项/溢出

ruby-on-rails - Ruby 和 PostgreSQL 单行模式

C : Valgring warns about "Invalid write/read of size 8" & close syscall

actionscript-3 - 3d 转换后文本和位图略微模糊

java - 如何将证书添加到 Android 信任库?

android - 正确扩展/覆盖库 Activity ,在新项目中有效地替换它?

asp.net-mvc - Autofac:MVC 应用程序中 InstancePerRequest 和 InstancePerLifetimeScope 之间有什么区别