Java 扩展ImageView会导致内存泄漏
你好 我正在扩展Java 扩展ImageView会导致内存泄漏,java,android,memory-leaks,imageview,Java,Android,Memory Leaks,Imageview,你好 我正在扩展ImageView类,因为我需要它是一个正方形,问题是它似乎导致内存泄漏,因为如果我使用未扩展的ImageView类,MAT中就没有输出。这是扩展版本,正如您所看到的,它非常简单: public class SquareImageView extends ImageView { public SquareImageView(Context context) { super(context); } public SquareImageVi
ImageView
类,因为我需要它是一个正方形,问题是它似乎导致内存泄漏,因为如果我使用未扩展的ImageView
类,MAT中就没有输出。这是扩展版本,正如您所看到的,它非常简单:
public class SquareImageView extends ImageView {
public SquareImageView(Context context) {
super(context);
}
public SquareImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
}
我将它实现为一个GridView
项,类似于:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="@drawable/item_button">
<com.gc.materialdesign.views.ProgressBarCircularIndeterminate
android:id="@+id/progressBarCircularIndeterminate"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="center"
android:background="@color/orange"/>
<!-- if I use <ImageView/>, everything is ok -->
<com.example.widgets.SquareImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"/>
</FrameLayout>
这是我在打开和关闭包含gridview的片段10次后在柱状图中得到的结果,您可以看到保留的堆是巨大的,此时我已经强制GC:
包含10个保留对象中1个的传入引用的列表:
和gc根的路径(不包括弱引用):
我通过循环使用ImageView位图来减少保留的堆:
但我不明白为什么要保留这10个对象。正如我在开始时所说的,如果我使用
ImageView
而不是扩展的,那么根本就没有泄漏。如果您能给我一个提示,那就太好了。在gc根路径(不包括弱引用)视图中,您的CardView有什么问题?有什么解决方案吗?