我在应用程序中使用MapView + Google。这是工作,但有时会有记忆问题。我试着添加
largeHeap =真
在……里面
AndroidManifest.xml
但问题仍未解决。
TrackLog:
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)在我的片段中:
@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();
}图书馆:
谢谢!
发布于 2017-12-01 03:40:40
largeheap=true所做的是,它增强了给应用程序的内存大小。例如,如果您的android为每个应用程序提供1MB的RAM大小,那么启用大型堆则提供2MB的内存。因此,这可以解决内存不足的问题,只有当您使用的内存现在是在新的给定的大规格的RAM。这就是为什么人们说largeheap=true不是修复OOM的最佳方法,因为它只会延迟OOM的发生,所以建议大多数时候不使用largeheap=true来修复OOM。
从给定的代码中我不能确定您使用的是哪个容器,但是刷新容器以便释放过多的已使用内存,以便能够被垃圾收集器回收,是修复OOM的一种典型方法。首先,尝试手动刷新容器(退出并输入可能),以查看它是否解析OOM。最后,您将不得不编程您的容器自动刷新,以防止OOM。
https://stackoverflow.com/questions/47586161
复制相似问题