【问题标题】:Android Constrain Layout use too many memory (ram) (memory leak)Android Constraintlayout 使用太多内存(ram)(内存泄漏)
【发布时间】:2016-07-23 18:47:47
【问题描述】:

我真的不明白约束布局会发生什么。

我的旧 ui 仅使用 15 MB 内存,而新 ui 使用 ~400MB

有人有想法吗?

旧界面

在实际的 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" />

新用户界面

在超过 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" />

【问题讨论】:

    标签: android android-layout android-constraintlayout


    【解决方案1】:

    这个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'
    

    使用新的用户界面。 现在 alpha7 上的 bug 也已修复

    【讨论】:

      【解决方案2】:

      在 alpha 4 中有一个 bug,在 alpha 6 中得到了解决,这可以解释你所看到的(这显然是完全不正常的,约束布局实际上应该使用很少的内存)。你能检查一下这是否解决了你的问题,如果没有提交错误?谢谢!

      【讨论】:

      • 另一个答案已经表明它已通过降级到 alpha3 得到修复
      • 当然,但不建议使用 alpha 3 :-) -- 我们发布 alpha 4、alpha 5 和 alpha 6 是有原因的...(许多错误修复、性能改进和 API变化)。特别是 alpha 4 对性能有很大的内部整体帮助,因此知道 alpha 3 没有问题是很好的,但知道 alpha 6 是否解决了问题会更有用——它可能会,但如果这不是我们需要注意的事情)
      猜你喜欢
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2014-08-05
      • 2015-07-20
      • 2013-08-23
      相关资源
      最近更新 更多