MapFragment Google Maps API v2 内存不足错误/内存泄漏

2023-12-07

在过去的几天里,我读了很多类似的帖子,但没有一个专门回答这个问题。在使用混合地图进行大约 2 分钟的激进地图平移和缩放后,我开始遇到 OOM 问题。该应用程序似乎还在崩溃后保留了内存,因为在第一次失败后达到 OOM 所需的时间更少。我将代码缩小为仅具有 MapFragment 的 Activity,但仍然得到相同的 OOM。除了添加之外,我还使用 DDMS 和 MAT 来尝试隔离问题android:largeHeap="true"这只会延迟 OOM。屏幕重新定向不是问题,因为我正在设置android:screenOrientation="portrait"在我的清单中。任何帮助,将不胜感激。

2014年8月25日更新:这个问题应该会在 2013 年 5 月修复吗?

2014-09-06 更新:仍然没有成功,唯一好的选择是使用Normal代替Hybrid。 GC 似乎能够在没有图像的情况下跟上。

类似的帖子:

使用 Google Maps API 时出现内存不足错误

Android Google Maps API v2 的内存泄漏

Android 谷歌地图 API,OutOfMemoryError

主要活动:

public class MainActivity_blank extends Activity {

GoogleMap mMap;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main_activity_blank);
    setContentView(R.layout.map_fragment);

     setUpMapIfNeeded();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main_activity_blank, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the map.
    if (mMap == null) {
        mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            // The Map is verified. It is now safe to manipulate the map.
            //startUsingMap();
            mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        }
    }
}
}

logcat:

08-26 17:15:29.302: I/dalvikvm-heap(19642): Forcing collection of SoftReferences for 67108880-byte allocation
08-26 17:15:29.372: D/dalvikvm(19642): GC_BEFORE_OOM freed 822K, 65% free 37523K/106080K, paused 78ms, total 78ms
08-26 17:15:30.582: W/dalvikvm(19642): chunk is too big to transmit (length=49579336, 48435 bytes)
08-26 17:15:31.532: E/dalvikvm-heap(19642): Out of memory on a 67108880-byte allocation.
08-26 17:15:31.532: I/dalvikvm(19642): "GLThread 14876" prio=5 tid=19 RUNNABLE
08-26 17:15:31.532: I/dalvikvm(19642):   | group="main" sCount=0 dsCount=0 obj=0x42c120d8 self=0x787e8438
08-26 17:15:31.532: I/dalvikvm(19642):   | sysTid=19729 nice=1 sched=0/0 cgrp=apps handle=2021558416
08-26 17:15:31.532: I/dalvikvm(19642):   | state=R schedstat=( 51120733635 13119596807 80537 ) utm=1904 stm=3208 core=0
08-26 17:15:31.532: I/dalvikvm(19642):   at android.graphics.Bitmap.nativeCreate(Native Method)
08-26 17:15:31.532: I/dalvikvm(19642):   at android.graphics.Bitmap.createBitmap(Bitmap.java:924)
08-26 17:15:31.532: I/dalvikvm(19642):   at android.graphics.Bitmap.createBitmap(Bitmap.java:901)
08-26 17:15:31.532: I/dalvikvm(19642):   at android.graphics.Bitmap.createBitmap(Bitmap.java:868)
08-26 17:15:31.532: I/dalvikvm(19642):   at opl.a((null):-1)
08-26 17:15:31.532: I/dalvikvm(19642):   at okg.a((null):-1)
08-26 17:15:31.532: I/dalvikvm(19642):   at opy.a((null):-1)
08-26 17:15:31.532: I/dalvikvm(19642):   at opx.a((null):-1)
08-26 17:15:31.532: I/dalvikvm(19642):   at ojx.a((null):-1)
08-26 17:15:31.532: I/dalvikvm(19642):   at ojx.b((null):-1)
08-26 17:15:31.532: I/dalvikvm(19642):   at otq.k((null):-1)
08-26 17:15:31.532: I/dalvikvm(19642):   at otq.run((null):-1)
08-26 17:15:31.542: W/System.err(19642): OutOfMemory
08-26 17:15:31.642: D/dalvikvm(19642): GC_EXPLICIT freed 4803K, 64% free 38238K/106080K, paused 6ms+11ms, total 102ms
08-26 17:15:32.822: W/dalvikvm(19642): chunk is too big to transmit (length=49444016, 48303 bytes)
08-26 17:15:33.682: D/dalvikvm(19642): GC_FOR_ALLOC freed 3728K, 66% free 36916K/106080K, paused 65ms, total 65ms
08-26 17:15:34.752: W/dalvikvm(19642): chunk is too big to transmit (length=49398928, 48259 bytes)
08-26 17:15:35.462: I/dalvikvm-heap(19642): Forcing collection of SoftReferences for 67108880-byte allocation
08-26 17:15:35.512: D/dalvikvm(19642): GC_BEFORE_OOM freed 413K, 66% free 36502K/106080K, paused 52ms, total 52ms
08-26 17:15:36.742: W/dalvikvm(19642): chunk is too big to transmit (length=49398928, 48259 bytes)
08-26 17:15:37.282: E/dalvikvm-heap(19642): Out of memory on a 67108880-byte allocation.
08-26 17:15:37.282: I/dalvikvm(19642): "GLThread 14876" prio=5 tid=19 RUNNABLE
08-26 17:15:37.282: I/dalvikvm(19642):   | group="main" sCount=0 dsCount=0 obj=0x42c120d8 self=0x787e8438
08-26 17:15:37.282: I/dalvikvm(19642):   | sysTid=19729 nice=1 sched=0/0 cgrp=apps handle=2021558416
08-26 17:15:37.282: I/dalvikvm(19642):   | state=R schedstat=( 54770836691 14106993077 84458 ) utm=1996 stm=3481 core=0
08-26 17:15:37.282: I/dalvikvm(19642):   at android.graphics.Bitmap.nativeCreate(Native Method)
08-26 17:15:37.282: I/dalvikvm(19642):   at android.graphics.Bitmap.createBitmap(Bitmap.java:924)
08-26 17:15:37.282: I/dalvikvm(19642):   at android.graphics.Bitmap.createBitmap(Bitmap.java:901)
08-26 17:15:37.282: I/dalvikvm(19642):   at android.graphics.Bitmap.createBitmap(Bitmap.java:868)
08-26 17:15:37.282: I/dalvikvm(19642):   at opl.a((null):-1)
08-26 17:15:37.282: I/dalvikvm(19642):   at okg.a((null):-1)
08-26 17:15:37.282: I/dalvikvm(19642):   at opy.a((null):-1)
08-26 17:15:37.282: I/dalvikvm(19642):   at opx.a((null):-1)
08-26 17:15:37.282: I/dalvikvm(19642):   at ojx.a((null):-1)
08-26 17:15:37.282: I/dalvikvm(19642):   at ojx.b((null):-1)
08-26 17:15:37.282: I/dalvikvm(19642):   at otq.k((null):-1)
08-26 17:15:37.282: I/dalvikvm(19642):   at otq.run((null):-1)
08-26 17:15:37.432: W/dalvikvm(19642): threadid=19: thread exiting with uncaught exception (group=0x4178cda0)
08-26 17:15:37.442: E/AndroidRuntime(19642): FATAL EXCEPTION: GLThread 14876
08-26 17:15:37.442: E/AndroidRuntime(19642): Process: com.example.maptest, PID: 19642
08-26 17:15:37.442: E/AndroidRuntime(19642): java.lang.OutOfMemoryError
08-26 17:15:37.442: E/AndroidRuntime(19642):    at android.graphics.Bitmap.nativeCreate(Native Method)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at android.graphics.Bitmap.createBitmap(Bitmap.java:924)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at android.graphics.Bitmap.createBitmap(Bitmap.java:901)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at android.graphics.Bitmap.createBitmap(Bitmap.java:868)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at opl.a(Unknown Source)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at okg.a(Unknown Source)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at opy.a(Unknown Source)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at opx.a(Unknown Source)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at ojx.a(Unknown Source)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at ojx.b(Unknown Source)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at otq.k(Unknown Source)
08-26 17:15:37.442: E/AndroidRuntime(19642):    at otq.run(Unknown Source)
08-26 17:15:37.522: D/AbsListView(19642): unregisterIRListener() is called 
08-26 17:15:38.092: D/AbsListView(19642): onDetachedFromWindow
08-26 17:15:38.092: D/AbsListView(19642): unregisterIRListener() is called 
08-26 17:15:38.102: D/AbsListView(19642): onVisibilityChanged() is called, visibility : 8
08-26 17:15:38.102: D/AbsListView(19642): unregisterIRListener() is called

尝试在相应的Fragment方法中调用map onPause、onResume、onLowMemory。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MapFragment Google Maps API v2 内存不足错误/内存泄漏 的相关文章

随机推荐

  • 如何在pandas中仅在一个级别创建组

    我在 excel 文件中导入下面的 df3 数据框 并希望仅按名称分组 其余重复数据应如下所示 注意 每月数据将按月添加 Df3 pd read Excel Data print df3 Name ID Month Shift Jon 1
  • 为什么 iPad 上的 AES 加密和 PHP 解密会失败?

    我有一个 iPad 应用程序 可以将加密信息传输到基于 PHP 的网站 但我在正确解密此信息时遇到困难 我使用以下代码进行PHP端解密 Decryption function function mc decrypt decrypt key
  • 将 None 转换为空字符串的最惯用方法? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 执行以下操作最惯用的方法是什么 def xstr s if s is None return else return s s xstr a xstr b update 我采纳了 Trypt
  • 在 PHP 中用如此命名的变量替换括号内的文本

    我想替换方括号中的所有字符串 以及从名为该字符串的数组中随机选择的项目 它非常类似于这个问题 但有一点不同 因为我想用名为该数组的字符串替换不同括号的内容 一个例子应该会让这一点更清楚一些 所以说我已经拿到了字符串 This is a ve
  • 获取同一html中隐藏字段的值? [复制]

    这个问题在这里已经有答案了 我想得到的值hidden我的 html 中的字段
  • 如何从注入同一程序的另一个 .dll 调用函数?

    我的问题确实在上面 但是我将在下面提供更多信息 我有一个程序 它首先获取我的 假 d3d9 dll 然后将该DLL加载到我正在进行逆向工程的游戏中 一段时间后 dll 被加载 以及所有其他游戏依赖项 我想注入我的 DLL 它将完成逆向工程的
  • 代表的目的[重复]

    这个问题在这里已经有答案了 复制 事件和委托的区别及其各自的应用 代表的优势是什么 我在哪里使用代表 我想知道代表们的目的是什么 我没怎么用过它们 也想不出什么东西 在我的课程中 写到委托是所有符合其签名的方法的蓝图 此外 您可以向一个委托
  • 以不同的名称循环保存图像

    我在循环保存裁剪后的图像时遇到问题 我的代码 def run self image file print image file cap cv2 VideoCapture image file while cap isOpened ret f
  • 模板化成员函数 typedef 无法编译

    include
  • Sagepay Forms 加密方法 经典 ASP

    我有一个使用 Classic ASP 开发的定制购物车 我需要将其与 SagePay Forms 集成 我正在努力寻找任何记录的 ASP 代码示例 说明如何加密发送到 Sagepay 的订单数据 做过这件事的人能给我指出正确的方向吗 有一些
  • MongoDB中如何对2个字段的总和进行排序

    我有这个文件 id 59b804e1ee8a4071a5ea3fcc description description imagepath https example com type label downvotes 25 upvotes 1
  • 为 git-diff 输出中的空白着色

    关于代码格式 我是纯粹主义者 我经常删除不必要的空格 仅包含 ws 的行 行尾的 ws 等 我什至将 vim 设置为显示那种红色的线条 我的问题是 使用 git diff 我经常看到这样的东西 else else 即使我有 git diff
  • 我可以将 mono64 与 Visual Studio for Mac 结合使用吗?

    我是 Mono 开发 但不是 NET 开发 的新手 下载了 Visual Studio for Mac 并尝试从 Alea GPU 运行示例解决方案 它抱怨它需要 mono64 但我没有看到像在 Windows 中那样选择 64 位架构的选
  • C语言中的空函数指针是什么意思?

    假设我们有一个函数指针 void func0 void 其还定义为 void func0 void printf 0 n 但是 假设在某些时候我们尝试以某种方式访问 函数指针 那么当我进入代码时 如果 MS VS 调试器显示 func0 实
  • 取消格式化磁盘大小字符串

    有什么方法可以转换字符串吗1K to 1000 1M to 1000000等等 用一个 Bash 命令 我想避免成为第 100 万第 30 个人为此创建超过 10 行或超过 100 个字符的单行 hack 就像是iso2int 5MB Ed
  • Hibernate使用Oracle序列时不生成标识符

    我有以下映射 Entity SequenceGenerator name sacpSequenceGenerator sequenceName SACP SEQ public class Sacp private Integer id Id
  • 使用类成员函数作为回调?

    我需要将一个成员函数传递给第三方外部方法 box self intersection d mycallback The box self intersection d是第三方外部静态方法 我无法修改它 mycallback是我想将其传递到的
  • 在 IE7 中垂直居中块

    我试图在 IE7 中垂直居中一个块 如果可能的话 也可以在 IE6 中 让我弄清楚一件事 我不是垂直居中实际元素 而是元素内的文本 这是我的 CSS 和 HTML 适用于 IE8 及以上版本 但不适用于以下版本 a display tabl
  • 仅当第一个非空 android 时才关注第二个编辑文本

    目前我有两个编辑文本 假设我想对空编辑文本检查进行验证 运行时验证的更好方法是什么 我的代码是 final EditText ev1 EditText findViewById R id editText1 final EditText e
  • MapFragment Google Maps API v2 内存不足错误/内存泄漏

    在过去的几天里 我读了很多类似的帖子 但没有一个专门回答这个问题 在使用混合地图进行大约 2 分钟的激进地图平移和缩放后 我开始遇到 OOM 问题 该应用程序似乎还在崩溃后保留了内存 因为在第一次失败后达到 OOM 所需的时间更少 我将代码