在我的应用程序中,我有一个带有viewPager的活动,其中有8个片段,另外还有一个View分页器,其中一个片段和3个服务正在运行。我专用于图像的总堆大约是1mb,但是当我的应用程序启动时(在真实设备中)我的堆已经增长到17mb(任何启动之前的基本堆是8mb,所以这意味着9mb的堆增长) 在模拟器上我怎么看到这个堆增长的更少。跟踪我的堆后,我发现它的7 MB专用于
byte array (byte[], boolean[])
和3 mb到
byte array (short[], char[])
虽然我在我的应用程序中绝对没有使用byte [],并且每次我使用它来解码图像或其他后我已经取消了它的参考。在使用分配跟踪器进行跟踪后,我发现总共有376个参考了这个跟踪:
at java.lang.Float.valueOf(Float.java:397)
at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:947)
at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:476)
at android.animation.ValueAnimator.animationFrame(ValueAnimator.java:1123)
at android.animation.ValueAnimator$AnimationHandler.handleMessage(ValueAnimator.java:630)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4441)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
对不起头疼,所以最后我的问题是应用程序中堆的大小是17 mb还是正常大小,根据这些跟踪我应该在哪里搜索内存泄漏的数据类型? (背景下,处理,尺蠖,..)?非常感谢
在Addition中我可能会补充说,我有10x总是正在使用的处理程序(Looper.getMainLooper),这会是一个问题吗?
答案 0 :(得分:1)
这些字节数组实际上是你的Bitmap图像数据。所以这是正确的。但是,您不能将Bitmap
引用置空。首先致电Bitmap.recycle();
。请记住,此数据不会立即释放。 GC必须发生。但是不要强制GC出现在生产代码中。相反,如果System.gc();
为onStop();
,则可能会Activity
BuildConfig.DEBUG
true
{/ 1}}。