0dpが性能向上と言われるのはなぜですか?
疑問点
質問 回答 は、備考と解答を組み合わせて記入されています。
質問内容
いろいろ検索してみましたが、なぜ
Android Lint
と同様に、いくつかの
Eclipse
ヒントは、いくつかの
layout_height
と
layout_width
の値は
0dp
.
例えば、私の場合は
ListView
を変更するよう提案されたものです。
以前
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
</ListView>
その後
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</ListView>
同様に リストビューのアイテム . これらはすべて変更前と変更後では同じに見えますが、これらがパフォーマンス ブースターである理由を理解することに興味があります。
どなたか、その理由を説明できる方はいらっしゃいますか。役に立つのであれば、以下に一般的なレイアウトを示します。
ListView
.
<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>
回答
私はここに答えを入れています。それは本当に答えと以下の参照リンクの組み合わせだからです。もし私が何か間違っていたら、教えてください。
から 0dip layout_heightやlayouth_widthのトリックは何ですか?
で動作する3つの一般的なレイアウト属性があります。 幅 と 高さ
-
android:layout_height
-
android:layout_width
-
android:layout_weight
を実行すると
LinearLayout
は
垂直
であれば
layout_weight
は
高さ
の高さに影響します。
View
s (
ListView
). を設定することで
layout_height
から
0dp
に変更すると、この属性は無視されます。
例
<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
は
水平
であれば
layout_weight
に影響します。
幅
に影響します。
View
s (
ListView
). を設定することで
layout_width
から
0dp
に変更すると、この属性は無視されます。
例
<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>
属性を無視したい理由は、もし無視しなければ、より多くのCPU時間を使うレイアウトの計算に使われるからです。
さらに、これは、3 つの属性の組み合わせを使用するときに、レイアウトがどのように見えるべきかという混乱を防ぎます。これは アンドロイド開発者 が以下の回答で強調しています。
また
Android Lint
と
Eclipse
は、どちらも
0dip
. 以下のその回答から、あなたは
0dip
,
0dp
,
0px
などのように、どの単位でも同じサイズになります。
ListViewのwrap_contentを回避する。
もしあなたが今まで、なぜ
getView(...)
が何度も呼び出されるのを不思議に思っていたら、それは
wrap_content
.
使用方法
wrap_content
を使うと、すべての子
View
が測定され、さらに CPU 時間がかかります。この計測により、あなたの
getView(...)
が呼び出されます。今、これをテストしてみたところ、回数の多い
getView(...)
が呼び出される回数が劇的に減りました。
を使っていたときは
wrap_content
を使っていたとき、2つの
ListView
s,
getView(...)
は1つの行に対して3回ずつ呼び出され
ListView
が 3 回、もう一方の行が 4 回呼び出されます。
これを推奨される
0dp
,
getView(...)
は各行に対して一度だけ呼び出されました。これはかなり改善されましたが、それ以上に
wrap_content
を避けるためです。
ListView
よりも
0dp
.
しかし
0dp
の提案は、このために実質的にパフォーマンスを向上させます。
どのように解決するのですか?
まず、これがありますね。
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
</ListView>
リストビューの高さをwrap_contentに指定すると、トラブルの元になるので、絶対にしないでください。
Here
がその理由であり
this answer
.
さらにさらに。
いろいろ検索してみましたが、理由を本当に説明しているものは見つかりませんでした。 Android Lint やいくつかの Eclipse のヒントでは、いくつかの layout_height と layout_width の値を 0dp に置き換えることを示唆しています。
それは、あなたが
layout_weight = "1"
を使用しているため、ListViewは利用可能な限りの高さを取ることを意味します。そのため、この場合は
layout_height = "wrap_content"
に変更するだけです。
android:layout_height="0dp"
に変更すると、ListView の高さは
layout_weight = "1"
.
関連
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] アンドロイドボタンセレクター
-
[解決済み] Google Play ストア内部テストのロールアウトが開始できない
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 水平方向のLinearLayoutの右揃えボタン
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] バイト配列の画像ファイルをビットマップに変換するには?
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] <string> XMLで改行やタブを作るには(eclipse/android)?