15

我已经开发出从JSON检索数据,本地数据库上移动,并从本地数据库RecyclerView显示它的应用程序,和我的容器布局是象下面这样:ConstraintLayout Vs的RelativeLayout的&CardView - 高速缓存和内存空间

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:clickable="true" 
android:focusable="true" 
> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:gravity="end" 
    android:layout_gravity="end" 
    android:id="@+id/detailContainerLayout" 
    android:baselineAligned="true" 
    android:background="@drawable/border_bottom" 
    > 

<TextView 
    android:id="@+id/article_title" 
    style="@style/TextAppearance.AppCompat.Subhead" 
    android:layout_width="220dp" 
    android:layout_height="wrap_content" 
    android:paddingLeft="5dp" 
    android:paddingTop="2dp" 
    android:layout_marginRight="9dp" 
    android:layout_marginLeft="4dp" 
    android:textColor="@color/buttons_background" 
    android:fontFamily="sans-serif-condensed" 
    android:maxLines="2" 
    android:textSize="@dimen/text_main" 
    android:layout_gravity="end" 
    android:gravity="start" 
    android:layoutDirection="rtl"/> 

    <TextView 
     android:id="@+id/article_date" 
     style="@style/TextAppearance.AppCompat.Body1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="8dp" 
     android:paddingRight="9dp" 
     android:textColor="@color/textColor" 
     android:maxLines="1" 
     android:layout_gravity="end" 
     android:gravity="end" 
     android:textSize="@dimen/date_size" 
     android:layout_marginTop="8dp" 
     /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:layout_gravity="center_horizontal|bottom" 
     android:gravity="center_horizontal|bottom" 
     android:layout_marginTop="10dp" 
     > 


     <TextView 
      android:id="@+id/article_place" 
      style="@style/TextAppearance.AppCompat.Body1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textColor="@color/textColor" 
      android:layout_gravity="start|bottom" 
      android:gravity="start|bottom" 
      android:layout_weight="1.1" 

      android:maxLines="1" 
      android:fontFamily="sans-serif" 
      android:paddingBottom="5dp" 
      android:layoutDirection="rtl" 
      android:layout_marginRight="3dp" 
      /> 

     <TextView 
      android:id="@+id/article_placeIcon" 
      style="@style/TextAppearance.AppCompat.Body1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/textColor" 
      android:maxLines="1" 
      android:layout_gravity="start|bottom" 
      android:gravity="start|bottom" 
      /> 
    <TextView 
     android:id="@+id/article_subtitle" 
     style="@style/TextAppearance.AppCompat.Body1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textColor="@color/textColor" 
     android:maxLines="1" 
     android:layout_gravity="start|bottom" 
     android:gravity="start|bottom" 
     android:layout_weight="1.4" 
     android:fontFamily="sans-serif" 
     android:layout_marginRight="3dp" 
     android:paddingBottom="5dp" 
     android:layoutDirection="rtl" 
     /> 

     <TextView 
      android:id="@+id/article_subtitleICON" 
      style="@style/TextAppearance.AppCompat.Body1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/textColor" 
      android:maxLines="1" 
      android:layout_gravity="start|bottom" 
      android:gravity="start|bottom" 
      android:fontFamily="sans-serif" 
      android:layout_marginRight="9dp" 
      android:paddingBottom="5dp" 
      android:layoutDirection="rtl" 
      /> 

    </LinearLayout> 
</LinearLayout> 

    <LinearLayout 
     android:layout_width="100dp" 
     android:layout_height="80dp" 
     android:gravity="start|bottom" 
     android:layout_gravity="start|bottom" 

     > 
     <elryad.harajsooq.ActionbarContent.AllAds.ui.DynamicHeightNetworkImageView 
      android:id="@+id/thumbnail" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@color/photo_placeholder" 
      android:layout_gravity="start|bottom" 
      /> 

    </LinearLayout> 

所以,当我用CardViewRelativeLayout为我的项目的容器中,他们让我的应用程序缓存和内存的使用率非常高,我DATA为20MB和我CACHE是50MB +,但之后我改变容器布局ConstraintLayout

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_marginTop="2dp" 
android:clickable="true" 
android:focusable="true" 
android:background="@drawable/border_bottom"> 


<TextView 
    android:id="@+id/article_title" 
    style="@style/TextAppearance.AppCompat.Subhead" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="0dp" 
    android:layout_marginRight="5dp" 
    android:layout_marginTop="-10dp" 
    android:gravity="right" 
    android:fontFamily="sans-serif-condensed" 
    android:maxLines="1" 
    android:paddingLeft="5dp" 
    android:paddingTop="2dp" 
    android:textColor="@color/buttons_background" 
    android:textSize="@dimen/text_main" 
    app:layout_constraintHorizontal_bias="0.0" 
    app:layout_constraintLeft_toRightOf="@+id/thumbLayout" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" /> 



    <items .... 
      ....> 

</android.support.constraint.ConstraintLayout> 

数据和缓存回到如下正常状态和小尺寸:

enter image description here

我不不知道CardView或RelativeLayout发生了什么,使我的应用程序数据和缓存使用高空间....也许有人可以解释这一点。提前致谢。

+0

你可以发布一个简单的项目来证明这种行为吗? – azizbekian

+0

@azizbekian好吧,简单地说,应用程序将数据从json检索到本地数据库,然后从数据库中显示它,但我不知道为什么缓存和空间会影响它。 – Ibrahim

+1

由于缓存与您使用的布局没有任何关系。这真有趣。 – azizbekian

回答

0

尝试清除存储的数组和其他视图中使用的数组,也清除变量以及您初始化的所有变量。因为这可能需要 空间。尝试清除退格键,否则当你没有 的使用。

2

Contraint布局

左到右的错误修复(布局PARAMS进行缓存,防止你在运行时改变它们)

性能改进上的第一个布局

比支持是如果两个维都设置为MATCH_CONSTRAINT(0dp),则扩展为工作。这处理了一个维度受到限制并且您想将另一维度定义为比率的情况。

所以你肯定在约束布局中有这些性能提升,所以最好使用它而不是相对布局。

试图找出更多here

1

复杂的布局,包括嵌套LinearLayout将渲染过程中更Object创建。 ConstraintLayout是减少这些开销的平面布局。