Android-仅在具有MapView的单个Activity上有许多OutOfMemoryError异常

Android-仅在具有MapView的单个Activity上有许多OutOfMemoryError异常,第1张

Android-仅在具有MapView的单个Activity上有许多OutOfMemoryError异常

我下载了该应用程序并在通过dumpsys观察内存的同时进行了 *** 作。

情况看起来很正常,每次都会回收内存。我无法重现这种情况,但是我确实看到一个可能与之相关的峰值。每当您在地图上四处移动或在卫星中缩放(基本刷新图块)时,内存中都会出现短暂的峰值。如果您执行得足够快,则不会给它回收的机会,它会上升。

现在,我的手机是Android
3.3.4,并且配置良好,因此GC可能效率更高。我不知道我的旧测试电话是否会较慢地回收内存,因此,当我到达地图时(例如,添加鱼后),我是否仍会保留以前未被GC回收的活动中的内存。然后,我要做的就是去我的位置并通过放大/缩小来检查内容。加上以前的活动中的先前记忆,可能会使手机达到极限。

不过,这只是一个理论,我在旅途中,无法使用我所有的测试电话。您知道崩溃的手机版本吗?我会在3-4天后回来,我可以在旧手机上尝试该应用。

更新: 我已经在这个应用程序上进行了更多的实验。我几乎可以肯定,连续添加鱼会增加更多的回忆。我一直在添加和删除鱼,并通过dumpsys
meminfo检查内存是否持续增加。专业版的真正用户,甚至是不断添加和删除鱼的精简版用户,最终可能会接近极限并随后进入地图,这将触发内存不足错误,因为内存会进入地图。这是我几次添加和删除鱼后的快照

** pid 11572中的MEMINFO [com.hookedroid.fishingcompanion.lite] **         dalvik本机其他总数限制位图nativeBmp 大小:19728 18251不适用37979 32768不适用       已分配:17174 14674 N / A 31848 N / A 3144 0 免费:405 3577 N / A 3982 N / AN / AN / A(PSS):12750 1771 25944 40465 N / AN / AN / A  (脏共享):908 1544 5800 8252 N / AN / AN / A    (私人肮脏):12732 1008 24208 37948 N / AN / AN / A

您的私有内存总数达到37,948,如果我继续添加和删除鱼,我敢肯定,它将最终抛出OutOfMemoryException

更多更新(几分钟后): 我使用上述理论使应用程序崩溃。在发生之前,我必须多次添加和移除鱼。该应用程序崩溃之前可能超过50条鱼。

我的猜测是SQL无法正确清理。在每组添加和删除10条鱼(这是lite版本的限制)之后查看一下dumpsys,我看到

的SQL    堆:6581 MEMORY_USED:6581 PAGECACHE_OVERFLOW:173 MALLOC_SIZE:50 资料库      pgsz dbsz Lookaside(b)Dbname         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 33钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣         1 16 62钓鱼伴侣

即使我已经删除了鱼,SQL内存仍在增加。如果我继续这样做一段时间,最终它将达到手机的上限,并且转到地图(这会导致内存中的跳转)将触发内存不足异常,似乎表明地图页面是原因,而我认为添加/删除鱼页面是真正原因的一部分(我说“真正原因的一部分”,因为我不知道是否会发生类似的影响,例如我是否添加新位置)。

当总内存约为58MB时,我得到了正确的OutMemoryException(这可能因手机而异)。作为参考,这是我得到的一个类似的OutOfMemoryException:

D / dalvikvm(11572):GC_FOR_MALLOC释放了125K,11%释放了25734K / 28743K,外部4047K / 4695K,暂停了188msD / AndroidRuntime(11572):关闭VMW / dalvikvm(11572):threadid = 1:线程以未捕获的异常退出(group = 0x4001d648)E / AndroidRuntime(11572):致命异常:主要E / AndroidRuntime(11572):java.lang.OutOfMemoryError:位图大小超出VM预算(堆大小= 28743KB,已分配= 25734KB,位图大小= 4047KB)E / AndroidRuntime(11572):位于android.graphics.Bitmap.nativeCreate(本机方法)E / AndroidRuntime(11572):位于android.graphics.Bitmap.createBitmap(Bitmap.java:695)E / AndroidRuntime(11572):位于com.google.android.maps.ZoomHelper.createSnapshot(ZoomHelper.java:444)E / AndroidRuntime(11572):位于com.google.android.maps.ZoomHelper.beginZoom(ZoomHelper.java:194)E / AndroidRuntime(11572):位于com.google.android.maps.MapView $ 2.onScaleBegin(MapView.java:380)E / AndroidRuntime(11572):位于android.view.ScaleGestureDetector.onTouchEvent(ScaleGestureDetector.java:216)E / AndroidRuntime(11572):位于com.google.android.maps.MapView.onTouchEvent(MapView.java:682)E / AndroidRuntime(11572):位于android.view.View.dispatchTouchEvent(View.java:3932)E / AndroidRuntime(11572):位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:955)E / AndroidRuntime(11572):位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1015)E / AndroidRuntime(11572):位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1015)E / AndroidRuntime(11572):位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1015)

希望能帮助到你



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5506800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存