Android 约束布局使用过多内存 (ram)(内存泄漏)
Android Constrain Layout use too many memory (ram) (memory leak)
我真的不明白约束布局会发生什么。
我的旧 ui 仅使用 15 MB 内存,而新 ui 使用 ~400MB
有人有想法吗?
旧ui
在实际 Android 设备上使用 ~15MB 的内存
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text=" 11 January 2016"
android:id="@+id/dateTv"
android:gravity="center_horizontal"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toTopOf="@+id/constraintLayout4"
android:layout_marginTop="16dp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="12 : 59 PM"
android:id="@+id/timeTv"
android:gravity="center_horizontal"
app:layout_constraintLeft_toRightOf="@+id/dateTv"
app:layout_constraintTop_toTopOf="@+id/dateTv"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintHorizontal_bias="1.0" />
<SeekBar
android:layout_width="0dp"
android:layout_height="20dp"
android:id="@+id/seekBarFoodQuantity"
android:max="10"
app:layout_constraintLeft_toRightOf="@+id/decrease"
android:layout_marginStart="8dp"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toBottomOf="@+id/timeTv"
android:layout_marginTop="48dp"
app:layout_constraintRight_toLeftOf="@+id/increase"
android:layout_marginEnd="8dp"
tools:layout_constraintRight_creator="1" />
<TextView
android:text="-"
android:gravity="center"
android:layout_width="49dp"
android:layout_height="49dp"
android:id="@+id/decrease"
android:textSize="40sp"
android:background="@color/red_300"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="8dp"
app:layout_constraintTop_toTopOf="@+id/seekBarFoodQuantity"
app:layout_constraintBottom_toBottomOf="@+id/seekBarFoodQuantity" />
<TextView
android:text="+"
android:layout_width="49dp"
android:layout_height="49dp"
android:id="@+id/increase"
android:textSize="40sp"
android:background="@color/green_400"
android:gravity="center"
app:layout_constraintTop_toTopOf="@+id/seekBarFoodQuantity"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@+id/seekBarFoodQuantity" />
<TextView
android:text="@string/quantity"
android:layout_width="137dp"
android:layout_height="49dp"
android:id="@+id/tvQuantity"
android:textSize="20sp"
android:gravity="center"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toBottomOf="@+id/seekBarFoodQuantity"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
tools:layout_constraintRight_creator="1"
app:layout_constraintBottom_toBottomOf="@+id/constraintLayout4"
android:layout_marginBottom="16dp"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:text="Save"
android:layout_width="137dp"
android:layout_height="49dp"
android:id="@+id/tvSave"
android:textSize="20sp"
android:gravity="center"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toBottomOf="@+id/seekBarFoodQuantity"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
tools:layout_constraintRight_creator="1"
app:layout_constraintBottom_toBottomOf="@+id/constraintLayout4"
android:layout_marginBottom="16dp" />
<include layout="@layout/bottom_bar" android:id="@+id/bottombarAddFood"
android:layout_width="0dp"
android:layout_height="72dp"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
app:layout_constraintBottom_toBottomOf="@+id/constraintLayout4" />
新建ui
在超过 400 MB 的实际 Android 设备上使用 ram!!!
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text=" 11 January 2016"
android:id="@+id/dateTv"
android:gravity="center_horizontal"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toBottomOf="@+id/editText2"
android:layout_marginTop="8dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="12 : 59 PM"
android:id="@+id/timeTv"
android:gravity="center_horizontal"
app:layout_constraintTop_toTopOf="@+id/dateTv"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="@+id/dateTv" />
<SeekBar
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/seekBarFoodQuantity"
android:max="10"
app:layout_constraintLeft_toRightOf="@+id/decrease"
android:layout_marginStart="8dp"
app:layout_constraintTop_toTopOf="@+id/decrease"
app:layout_constraintRight_toLeftOf="@+id/increase"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@+id/decrease" />
<TextView
android:text="-"
android:gravity="center"
android:layout_width="49dp"
android:layout_height="49dp"
android:id="@+id/decrease"
android:textSize="40sp"
android:background="@color/red_300"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toBottomOf="@+id/textView2"
android:layout_marginTop="24dp" />
<TextView
android:text="+"
android:layout_width="49dp"
android:layout_height="49dp"
android:id="@+id/increase"
android:textSize="40sp"
android:background="@color/green_400"
android:gravity="center"
app:layout_constraintTop_toTopOf="@+id/seekBarFoodQuantity"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="@+id/seekBarFoodQuantity" />
<TextView
android:text="@string/quantity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvQuantity"
android:textSize="20sp"
android:gravity="center"
app:layout_constraintLeft_toLeftOf="@+id/seekBarFoodQuantity"
app:layout_constraintTop_toBottomOf="@+id/seekBarFoodQuantity"
android:layout_marginTop="8dp"
app:layout_constraintRight_toRightOf="@+id/seekBarFoodQuantity" />
<TextView
android:text="Save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvSave"
android:textSize="20sp"
android:gravity="center"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toTopOf="@+id/bottombarAddFood"
android:layout_marginBottom="8dp" />
<include layout="@layout/bottom_bar" android:id="@+id/bottombarAddFood"
android:layout_width="wrap_content"
android:layout_height="72dp"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
app:layout_constraintBottom_toBottomOf="@+id/constraintLayout4" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
android:id="@+id/editText2"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toTopOf="@+id/constraintLayout4"
android:layout_marginTop="16dp"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioLittle"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toBottomOf="@+id/dateTv"
android:layout_marginTop="32dp"
app:layout_constraintRight_toLeftOf="@+id/radioMedium"
android:layout_marginEnd="8dp"
app:layout_constraintHorizontal_bias="0.33" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioMedium"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toTopOf="@+id/radioMost"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="@+id/radioMost"
app:layout_constraintHorizontal_bias="0.75"
app:layout_constraintVertical_bias="1.0" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioMost"
app:layout_constraintLeft_toRightOf="@+id/radioLittle"
android:layout_marginStart="8dp"
app:layout_constraintTop_toTopOf="@+id/radioLittle"
app:layout_constraintRight_toLeftOf="@+id/radioMedium"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@+id/radioLittle" />
<TextView
android:text="Little"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView2"
app:layout_constraintLeft_toLeftOf="@+id/radioLittle"
app:layout_constraintTop_toBottomOf="@+id/radioLittle"
android:layout_marginTop="8dp"
app:layout_constraintRight_toRightOf="@+id/radioLittle" />
<TextView
android:text="Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView3"
app:layout_constraintLeft_toLeftOf="@+id/radioMost"
app:layout_constraintTop_toBottomOf="@+id/radioMost"
android:layout_marginTop="8dp"
app:layout_constraintRight_toRightOf="@+id/radioMost" />
<TextView
android:text="Most"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView4"
app:layout_constraintLeft_toLeftOf="@+id/radioMedium"
app:layout_constraintTop_toBottomOf="@+id/radioMedium"
android:layout_marginTop="8dp"
app:layout_constraintRight_toRightOf="@+id/radioMedium" />
看来bug在
编译 'com.android.support.constraint:constraint-layout:1.0.0-alpha4'
新的 ui 使用 alpha4 而旧的 ui 使用 alpha3
然后我用
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha3'
与新 ui。
现在 alpha7 上的错误也已修复
alpha 4 中存在一个错误,该错误在 alpha 6 中得到解决,这可能解释了您所看到的情况(这显然是完全不正常的,约束布局实际上应该使用很少的 ram)。你能检查一下这是否解决了你的问题,如果没有,请提交错误?谢谢!
我真的不明白约束布局会发生什么。
我的旧 ui 仅使用 15 MB 内存,而新 ui 使用 ~400MB
有人有想法吗?
旧ui
在实际 Android 设备上使用 ~15MB 的内存
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text=" 11 January 2016"
android:id="@+id/dateTv"
android:gravity="center_horizontal"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toTopOf="@+id/constraintLayout4"
android:layout_marginTop="16dp" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="12 : 59 PM"
android:id="@+id/timeTv"
android:gravity="center_horizontal"
app:layout_constraintLeft_toRightOf="@+id/dateTv"
app:layout_constraintTop_toTopOf="@+id/dateTv"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintHorizontal_bias="1.0" />
<SeekBar
android:layout_width="0dp"
android:layout_height="20dp"
android:id="@+id/seekBarFoodQuantity"
android:max="10"
app:layout_constraintLeft_toRightOf="@+id/decrease"
android:layout_marginStart="8dp"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toBottomOf="@+id/timeTv"
android:layout_marginTop="48dp"
app:layout_constraintRight_toLeftOf="@+id/increase"
android:layout_marginEnd="8dp"
tools:layout_constraintRight_creator="1" />
<TextView
android:text="-"
android:gravity="center"
android:layout_width="49dp"
android:layout_height="49dp"
android:id="@+id/decrease"
android:textSize="40sp"
android:background="@color/red_300"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="8dp"
app:layout_constraintTop_toTopOf="@+id/seekBarFoodQuantity"
app:layout_constraintBottom_toBottomOf="@+id/seekBarFoodQuantity" />
<TextView
android:text="+"
android:layout_width="49dp"
android:layout_height="49dp"
android:id="@+id/increase"
android:textSize="40sp"
android:background="@color/green_400"
android:gravity="center"
app:layout_constraintTop_toTopOf="@+id/seekBarFoodQuantity"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@+id/seekBarFoodQuantity" />
<TextView
android:text="@string/quantity"
android:layout_width="137dp"
android:layout_height="49dp"
android:id="@+id/tvQuantity"
android:textSize="20sp"
android:gravity="center"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toBottomOf="@+id/seekBarFoodQuantity"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
tools:layout_constraintRight_creator="1"
app:layout_constraintBottom_toBottomOf="@+id/constraintLayout4"
android:layout_marginBottom="16dp"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:text="Save"
android:layout_width="137dp"
android:layout_height="49dp"
android:id="@+id/tvSave"
android:textSize="20sp"
android:gravity="center"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toBottomOf="@+id/seekBarFoodQuantity"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
tools:layout_constraintRight_creator="1"
app:layout_constraintBottom_toBottomOf="@+id/constraintLayout4"
android:layout_marginBottom="16dp" />
<include layout="@layout/bottom_bar" android:id="@+id/bottombarAddFood"
android:layout_width="0dp"
android:layout_height="72dp"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
app:layout_constraintBottom_toBottomOf="@+id/constraintLayout4" />
新建ui
在超过 400 MB 的实际 Android 设备上使用 ram!!!
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text=" 11 January 2016"
android:id="@+id/dateTv"
android:gravity="center_horizontal"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toBottomOf="@+id/editText2"
android:layout_marginTop="8dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="12 : 59 PM"
android:id="@+id/timeTv"
android:gravity="center_horizontal"
app:layout_constraintTop_toTopOf="@+id/dateTv"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="@+id/dateTv" />
<SeekBar
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/seekBarFoodQuantity"
android:max="10"
app:layout_constraintLeft_toRightOf="@+id/decrease"
android:layout_marginStart="8dp"
app:layout_constraintTop_toTopOf="@+id/decrease"
app:layout_constraintRight_toLeftOf="@+id/increase"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@+id/decrease" />
<TextView
android:text="-"
android:gravity="center"
android:layout_width="49dp"
android:layout_height="49dp"
android:id="@+id/decrease"
android:textSize="40sp"
android:background="@color/red_300"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toBottomOf="@+id/textView2"
android:layout_marginTop="24dp" />
<TextView
android:text="+"
android:layout_width="49dp"
android:layout_height="49dp"
android:id="@+id/increase"
android:textSize="40sp"
android:background="@color/green_400"
android:gravity="center"
app:layout_constraintTop_toTopOf="@+id/seekBarFoodQuantity"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="@+id/seekBarFoodQuantity" />
<TextView
android:text="@string/quantity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvQuantity"
android:textSize="20sp"
android:gravity="center"
app:layout_constraintLeft_toLeftOf="@+id/seekBarFoodQuantity"
app:layout_constraintTop_toBottomOf="@+id/seekBarFoodQuantity"
android:layout_marginTop="8dp"
app:layout_constraintRight_toRightOf="@+id/seekBarFoodQuantity" />
<TextView
android:text="Save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvSave"
android:textSize="20sp"
android:gravity="center"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toTopOf="@+id/bottombarAddFood"
android:layout_marginBottom="8dp" />
<include layout="@layout/bottom_bar" android:id="@+id/bottombarAddFood"
android:layout_width="wrap_content"
android:layout_height="72dp"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
app:layout_constraintBottom_toBottomOf="@+id/constraintLayout4" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text="Name"
android:ems="10"
android:id="@+id/editText2"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toTopOf="@+id/constraintLayout4"
android:layout_marginTop="16dp"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioLittle"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toBottomOf="@+id/dateTv"
android:layout_marginTop="32dp"
app:layout_constraintRight_toLeftOf="@+id/radioMedium"
android:layout_marginEnd="8dp"
app:layout_constraintHorizontal_bias="0.33" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioMedium"
app:layout_constraintLeft_toLeftOf="@+id/constraintLayout4"
android:layout_marginStart="16dp"
app:layout_constraintTop_toTopOf="@+id/radioMost"
app:layout_constraintRight_toRightOf="@+id/constraintLayout4"
android:layout_marginEnd="16dp"
app:layout_constraintBottom_toBottomOf="@+id/radioMost"
app:layout_constraintHorizontal_bias="0.75"
app:layout_constraintVertical_bias="1.0" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radioMost"
app:layout_constraintLeft_toRightOf="@+id/radioLittle"
android:layout_marginStart="8dp"
app:layout_constraintTop_toTopOf="@+id/radioLittle"
app:layout_constraintRight_toLeftOf="@+id/radioMedium"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@+id/radioLittle" />
<TextView
android:text="Little"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView2"
app:layout_constraintLeft_toLeftOf="@+id/radioLittle"
app:layout_constraintTop_toBottomOf="@+id/radioLittle"
android:layout_marginTop="8dp"
app:layout_constraintRight_toRightOf="@+id/radioLittle" />
<TextView
android:text="Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView3"
app:layout_constraintLeft_toLeftOf="@+id/radioMost"
app:layout_constraintTop_toBottomOf="@+id/radioMost"
android:layout_marginTop="8dp"
app:layout_constraintRight_toRightOf="@+id/radioMost" />
<TextView
android:text="Most"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView4"
app:layout_constraintLeft_toLeftOf="@+id/radioMedium"
app:layout_constraintTop_toBottomOf="@+id/radioMedium"
android:layout_marginTop="8dp"
app:layout_constraintRight_toRightOf="@+id/radioMedium" />
看来bug在 编译 'com.android.support.constraint:constraint-layout:1.0.0-alpha4'
新的 ui 使用 alpha4 而旧的 ui 使用 alpha3
然后我用
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha3'
与新 ui。 现在 alpha7 上的错误也已修复
alpha 4 中存在一个错误,该错误在 alpha 6 中得到解决,这可能解释了您所看到的情况(这显然是完全不正常的,约束布局实际上应该使用很少的 ram)。你能检查一下这是否解决了你的问题,如果没有,请提交错误?谢谢!