字节数组(byte [],boolean [])保留大部分内存分配,而在应用程序中没有使用byte []

时间:2014-10-29 19:13:01

标签: android

在我的应用程序中,我有一个带有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),这会是一个问题吗?

1 个答案:

答案 0 :(得分:1)

这些字节数组实际上是你的Bitmap图像数据。所以这是正确的。但是,您不能将Bitmap引用置空。首先致电Bitmap.recycle();。请记住,此数据不会立即释放。 GC必须发生。但是不要强制GC出现在生产代码中。相反,如果System.gc();onStop();,则可能会Activity BuildConfig.DEBUG true {/ 1}}。