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是減少這些開銷的平面佈局。