我有一个C++的Android应用程序,该应用程序在只有768MB RAM的设备上定期崩溃,因为它的内存不足。应用程序在这些设备上以"malloc"或"dlmalloc_real"崩溃。下面我提供了Google Play管理中心报告的可能的堆栈跟踪之一:
#00 pc 00000000000225ac /system/lib/libc.so (tgkill+12)
#01 pc 00000000000130b1 /system/lib/libc.so (pthread_kill+48)
#02 pc 00000000000132c5 /system/lib/libc.so (raise+10)
#03 pc 0000000000011ff9 /system/lib/libc.so
#04 pc 0000000000021e60 /system/lib/libc.so (abort+4)
#05 pc 0000000000012ae1 /system/lib/libc.so
#06 pc 000000000000f205 /system/lib/libc.so
#07 pc 000000000001010d /system/lib/libc.so (dlmalloc+604)
#08 pc 000000000000dce7 /system/lib/libc.so (malloc+10)
#09 pc 00000000000cf8d1 /system/lib/libGAL.so (gcoOS_AllocateMemory+8)
#10 pc 00000000000cf943 /system/lib/libGAL.so (gcoOS_Allocate+46)
#11 pc 0000000000029d65 /system/lib/egl/libGLESv2_MRVL.so (__eglMalloc+16)
#12 pc 00000000000284a3 /system/lib/egl/libGLESv2_MRVL.so (__glGetDrawable+338)
#13 pc 0000000000029cfb /system/lib/egl/libGLESv2_MRVL.so
#14 pc 00000000000083a9 /system/lib/egl/libEGL_MRVL.so (_ApiMakeCurrent+32)
#15 pc 0000000000009987 /system/lib/egl/libEGL_MRVL.so (veglMakeCurrent+1838)
#16 pc 0000000000009dcb /system/lib/egl/libEGL_MRVL.so (eglMakeCurrent+54)
#17 pc 000000000000d459 /system/lib/libEGL.so (android::egl_display_t::makeCurrent(android::egl_context_t*, android::egl_context_t*, void*, void*, void*, void*, void*, void*)+84)
#18 pc 000000000000fbc5 /system/lib/libEGL.so (eglMakeCurrent+240)
#19 pc 0000000000073569 /data/data/net.my.app/qt-reserved-files/plugins/platforms/android/libqtforandroid.so
例如,是否可以处理应用程序以某种方式耗尽内存并关闭应用程序以向用户显示消息的情况?这是否有意义(目前尚不清楚崩溃率是否会影响Google Play中的应用评级(?
在 Java 端,您可以使用 API 16 或更高版本获取内存大小:
ActivityManager actManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
actManager.getMemoryInfo(memInfo);
long totalMemory = memInfo.totalMem;
希望它会有所帮助。