首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓谷歌地图OutOfMemory

安卓谷歌地图OutOfMemory
EN

Stack Overflow用户
提问于 2017-12-01 03:22:49
回答 1查看 1.1K关注 0票数 0

我在应用程序中使用MapView + Google。这是工作,但有时会有记忆问题。我试着添加

largeHeap =真

在……里面

AndroidManifest.xml

但问题仍未解决。

TrackLog:

代码语言:javascript
复制
Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 4194316 byte allocation with 1810320 free bytes and 1767KB until OOM
       at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java)
       at android.graphics.Bitmap.nativeCreate(Bitmap.java)
       at android.graphics.Bitmap.createBitmap(Bitmap.java:977)
       at android.graphics.Bitmap.createBitmap(Bitmap.java:948)
       at android.graphics.Bitmap.createBitmap(Bitmap.java:915)
       at com.google.maps.api.android.lib6.gmm6.vector.gl.k.a(:com.google.android.gms.DynamiteModulesB@11746440:7)
       at com.google.maps.api.android.lib6.gmm6.vector.gl.ah.a(:com.google.android.gms.DynamiteModulesB@11746440:73)
       at com.google.maps.api.android.lib6.gmm6.vector.gl.ah.a(:com.google.android.gms.DynamiteModulesB@11746440:46)
       at com.google.maps.api.android.lib6.gmm6.vector.gl.ah.b(:com.google.android.gms.DynamiteModulesB@11746440:39)
       at com.google.maps.api.android.lib6.gmm6.vector.gl.drawable.ae.a(:com.google.android.gms.DynamiteModulesB@11746440:59)
       at com.google.maps.api.android.lib6.gmm6.vector.gl.drawable.am.a(:com.google.android.gms.DynamiteModulesB@11746440:346)
       at com.google.maps.api.android.lib6.gmm6.vector.cb.a(:com.google.android.gms.DynamiteModulesB@11746440:407)
       at com.google.maps.api.android.lib6.gmm6.vector.bs.a(:com.google.android.gms.DynamiteModulesB@11746440:664)
       at com.google.maps.api.android.lib6.gmm6.vector.bs.b(:com.google.android.gms.DynamiteModulesB@11746440:270)
       at com.google.maps.api.android.lib6.gmm6.vector.bb.f(:com.google.android.gms.DynamiteModulesB@11746440:257)
       at com.google.maps.api.android.lib6.gmm6.vector.bb.run(:com.google.android.gms.DynamiteModulesB@11746440:11)

在我的片段中:

代码语言:javascript
复制
@Override
public void onResume() {
    super.onResume();
    if (mMapView != null) {
        mMapView.onResume();
        mLocationHelper.checkPlayServices();
    }
}


 @Override
    public void onPause() {
        super.onPause();
        if (mMapView != null) {
            mMapView.onPause();
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        if (mMapView != null) {
            mMapView.onStop();
        }
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        if (mMapView != null && mGoogleMap != null) {
            mMapView.onLowMemory();
            mGoogleMap.clear();
        }
    }

    @Override
    public void onDestroyView() {
        if (mGoogleMap != null) {
            mGoogleMap.clear();
        }
        if (mMapView != null) {
            mMapView.onDestroy();
            mMapView = null;
        }
        super.onDestroyView();
    }

图书馆:

  • 播放-服务-地图:11.4.0
  • 播放-服务-地点:11.4.0

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-12-01 03:40:40

largeheap=true所做的是,它增强了给应用程序的内存大小。例如,如果您的android为每个应用程序提供1MB的RAM大小,那么启用大型堆则提供2MB的内存。因此,这可以解决内存不足的问题,只有当您使用的内存现在是在新的给定的大规格的RAM。这就是为什么人们说largeheap=true不是修复OOM的最佳方法,因为它只会延迟OOM的发生,所以建议大多数时候不使用largeheap=true来修复OOM。

从给定的代码中我不能确定您使用的是哪个容器,但是刷新容器以便释放过多的已使用内存,以便能够被垃圾收集器回收,是修复OOM的一种典型方法。首先,尝试手动刷新容器(退出并输入可能),以查看它是否解析OOM。最后,您将不得不编程您的容器自动刷新,以防止OOM。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47586161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档