Neden 0dp performans geliştirme olarak kabul edilir?
Bircevapbu soru sonunda, açıklamalar ve çözümleri birleştirerek dolu olmuştur.
Soru
Etrafa baktım ama gerçekten neden açıklayan bir şey bulamadımAndroid Lintyanı sıra bazıEclipseipuçları 0dp
layout_height
layout_width
Bazı değerleri yerine tavsiye.
Örneğin, değiştirilmesi önerildi ListView
bir ben var
Önce
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
</ListView>
Sonra
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</ListView>
Benzer şekilde, bir değişiklik önerdiListe görünümü öğesi. Bu değişiklikler önce ve sonra hepsi birbirine benzer, ama bu performans güçlendiriciler neden ve ne anlama ilgileniyorum.
Herkes neden böyle bir açıklama var mı? Eğer yardımı olacaksa, burada ListView
genel düzeni.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@ id/logo_splash"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ImageView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@color/background"
android:layout_below="@id/logo_splash">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</ListView>
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_upcoming" />
</LinearLayout>
</RelativeLayout>
Cevap
Gerçekten cevaplar ve başvurulan bağlantıları bir arada aşağıda çünkü burada bir cevap veriyorum. Eğer bir şey hakkında yanılıyorsam, bana bildirin.
What is the trick with 0dip layout_height or layouth_width?
İle çalışan 3 Genel yerleşim özellikleri vardırgenişlikveyükseklik
android:layout_height
android:layout_width
android:layout_weight
LinearLayout
bir zamandikeyo zaman layout_weight
etkisiyükseklikçocuk View
s (ListView
). 0dp
21 *ayarı bu niteliği göz ardı edilmesine neden olacak.
Örnek
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</ListView>
</LinearLayout>
LinearLayout
bir zamanyatayo zaman layout_weight
etkisigenişlikçocuk View
s (ListView
). 0dp
layout_width
ayarı bu niteliği göz ardı edilmesine neden olacak.
Örnek
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<ListView
android:id="@android:id/list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
</ListView>
</LinearLayout>
Öznitelik görmezden istediğiniz nedeni, eğer bunu göz ardı etmedin bile, daha fazla CPU zamanı kullanır düzenini hesaplamak için kullanılan olurdu.
Ayrıca bu düzeni üç özelliklerini bir arada kullanırken nasıl olması gerektiği üzerinde herhangi bir karışıklığı önler. Bu vurgulanmış@geliştirici androidcevap aşağıda.
Ayrıca,Android LintveEclipseher iki 0dip
kullanmak demek. Cevap aşağıda, sıfır beden birimlerinin herhangi birinde aynı olduğundan*32, *, 0px
, **33 vb kullanabilirsiniz.
Liste Görünümü üzerinde wrap_content kaçının
Eğer hiç getView(...)
bir çok kez yaptığım gibi denir merak ettiyseniz, wrap_content
ile ilgili olduğu ortaya çıkıyor.
Yukarıda kullanıyordum gibi wrap_content
kullanarak daha fazla CPU süresi neden olacak View
tüm alt s ölçülen neden olur. Bu ölçüm 39 ** denilen neden olur. Şimdi bu test ettik ve getView(...)
denir sayısını önemli ölçüde azalır.
İki wrap_content
ile ListView
s getView(...)
her satır, diğer tarafta ListView
ve her satır için 4 kez 3 kez çağrıldı.
Önerilen bu değişen 0dp
, getView(...)
sadece bir kez, her satır için çağrıldı. Bu oldukça iyi bir gelişme olduğunu, ancak 0dp
göre ListView
wrap_content
kaçınma ile yapmak daha vardır.
Ancak 0dp
önerisi bu yüzden performansı artırmak önemli.
CEVAP
Bu var öncelikle
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
</ListView>
Hiç sıkıntı içine götürecek wrap_content olarak Liste Görünümü yüksekliği. Here
ve this answer
nedeni budur.
Daha fazla,
Etrafa baktım ama gerçekten neden açıklayan bir şey bulamadım Android Lint olarak Tutulması bazı ipuçları bazılarının yerini göstermektedir 0dp ile layout_width ve layout_height değerlerini.
Yüksekliği için kullanılabilir kadar Al ile Liste Görünümü anlamına gelir layout_weight = "1"
kullanıyor çünkü. Yani, bu durumda layout_height = "wrap_content"
android:layout_height="0dp"
değiştirmek için kullanmaya gerek yok ve Liste Görünümü yükseklik layout_weight = "1"
tarafından yönetilecek.
Neden Java Vector sınıfı eski veya kul...
Neden SELECT * zararlı olarak kabul ed...
Neden statik bir yöntem olarak kabul e...
Neden görünümünde hazırda açık oturum ...
Neden döngüsel başvurular zararlı olar...