Android Uygulama Performasฤฑnฤฑ anlatmaya baลladฤฑฤฤฑmda linkteki yazฤฑmda kullanฤฑlabilecek toollarฤฑ ve nasฤฑl kullanabileceฤimizi anlatmฤฑลtฤฑm. Biraz daha derine inip, elde ettiฤimiz veriyi nasฤฑl kullanacaฤฤฑmฤฑzฤฑ anlatmanฤฑn zamanฤฑ geldi.
Github’da sample bir proje hazฤฑrladฤฑm. ฤฐndirip hatalฤฑ ve doฤru olan kodlarฤฑ inceleyebilirsiniz.
Mesela aลaฤฤฑdaki gibi bir ekran yaratmak istediฤimizi dรผลรผnelim.
Bu kadar basit bir arayรผzde รถnemli olan recylerview’in row’larฤฑnda kullandฤฑฤฤฑmฤฑz layoutlarฤฑn nasฤฑl tasarlandฤฑฤฤฑdฤฑr.
16 ms’lฤฑk frame time’ฤฑn dฤฑลฤฑna รงฤฑkmamak iรงin mรผmkรผn olduฤunca simple ve flat olmamฤฑz gerekir. Linkini de verdiฤim yazฤฑnฤฑn sonundaki tips&tricks kฤฑsmฤฑnda da belirttiฤim gibi de eฤer kullanabiliyorsak, LinearLayout yerine RelativeLayout kullanarak tek bir katmanda viewlerimizi yerleลtirebilmiล olursak, daha performanslฤฑ bir kod yazmฤฑล olur.
Hatalฤฑ kullanฤฑm รถrnekleri birden fazla olabilir. Ben รถrnek olarak aลaฤฤฑdaki xml paylaลฤฑmฤฑ yarattฤฑm.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="16dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center"> <ImageView android:id="@+id/photo" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:paddingLeft="16dp"> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/place" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <RelativeLayout android:layout_width="100dp" android:layout_height="wrap_content" android:paddingLeft="16dp"> <ImageView android:id="@+id/colorImage" android:layout_width="80dp" android:layout_height="30dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:background="@android:color/holo_green_dark" /> <TextView android:id="@+id/year" android:layout_width="80dp" android:layout_height="30dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:gravity="center"/> <TextView android:id="@+id/day" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/year" android:layout_centerHorizontal="true" /> </RelativeLayout> </LinearLayout>
Gรถrรผldรผฤรผ gibi gereksiz parent, layout kullanฤฑmlarฤฑ var. Bunu en basit ลekliyle ise aลaฤฤฑdaki gibi yerleลtirerek yapabilirdik.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="16dp"> <ImageView android:id="@+id/photo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_gravity="center" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/photo" android:paddingLeft="16dp" /> <TextView android:id="@+id/place" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/photo" android:layout_below="@id/name" android:paddingLeft="16dp" /> <TextView android:id="@+id/year" android:layout_width="80dp" android:layout_height="30dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginLeft="16dp" android:background="@android:color/holo_green_dark" android:gravity="center" /> <TextView android:id="@+id/day" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/year" android:layout_alignParentRight="true" android:layout_below="@+id/year" android:layout_marginLeft="16dp" /> </RelativeLayout>
Tek bir parent’la da aslฤฑnda aynฤฑ yerleลimi saฤlayabiliyorduk.
Peki hierarchy viewer bununla ilgili bize nasฤฑl bir รถngรถrรผ verebilirdi? Aลaฤฤฑdaki hatalฤฑ kullanฤฑmฤฑn outputu. Gรถrรผldรผฤรผ gibi dallanma biraz fazla.
Aลaฤฤฑdaki ise optimizasyon yapฤฑldฤฑktan sonraki hali. Yapฤฑdaki flatleลme gรถzle gรถrรผlรผr dรผzeyde.
Bu dรผzeyde bir uygulamada, belki deฤiลiklik yapmasanฤฑz da รงok bรผyรผk bir kaybฤฑnฤฑz olmayabilirdi. Ama รถnemli olan nasฤฑl yapฤฑlmasฤฑ gerektiฤini ve HierarchyViewer’ฤฑ kullanarak nasฤฑl รงฤฑkarฤฑm yapabileceฤimizi gรถrmek, daha kompleks yapฤฑlarda bunu dรผลรผnรผp, yapฤฑmฤฑzฤฑ mรผmkรผn olduฤunca flat ลekilde kurmak.
Umarฤฑm HierarchyViewer’ฤฑn kullanฤฑmฤฑ aรงฤฑsฤฑndan bir parรงa daha aydฤฑnlanmanฤฑzฤฑ saฤlayabilmiลimdir. ฤฐyi hafta sonlarฤฑ ๐