2012/02/07
ListView の表示時に無駄が多すぎなのではないか?
先のエントリに載せたコードを動作させたときのログが以下です。
Inflate 0 (position: 0) 1093385840 Display (position: 0) 1093385840 Display (position: 1) 1093385840 Display (position: 2) 1093385840 Display (position: 3) 1093385840 Display (position: 4) 1093385840 Display (position: 5) 1093385840 Display (position: 6) 1093385840 Display (position: 7) 1093385840 Display (position: 8) 1093385840 Display (position: 9) 1093385840 Display (position: 10) 1093385840 Display (position: 0) 1093385840 Inflate 1 (position: 1) 1093396968 Display (position: 1) 1093396968 Inflate 2 (position: 2) 1093401912 Display (position: 2) 1093401912 Inflate 3 (position: 3) 1093406856 Display (position: 3) 1093406856 Inflate 4 (position: 4) 1093411800 Display (position: 4) 1093411800 Inflate 5 (position: 5) 1093416744 Display (position: 5) 1093416744 Inflate 6 (position: 6) 1093421688 Display (position: 6) 1093421688 Inflate 7 (position: 7) 1093426632 Display (position: 7) 1093426632 Inflate 8 (position: 8) 1093431576 Display (position: 8) 1093431576 Inflate 9 (position: 9) 1093436520 Display (position: 9) 1093436520 Inflate 10 (position: 10) 1093441464 Display (position: 10) 1093441464 Inflate 11 (position: 0) 1093451272 Display (position: 0) 1093451272 Display (position: 1) 1093451272 Display (position: 2) 1093451272 Display (position: 3) 1093451272 Display (position: 4) 1093451272 Display (position: 5) 1093451272 Display (position: 6) 1093451272 Display (position: 7) 1093451272 Display (position: 8) 1093451272 Display (position: 9) 1093451272 Display (position: 10) 1093451272
これ、スクロールとかしないで、ただ表示させただけなんですが、かなり無駄なことしてる気がします。
一番右の数字は 参照している View の hashCode で、値が同じ場合は同じインスタンスを見ていることを表します。
上から見ていくと、0列目をInflateしたら、そのインスタンス上に1~10を一回ずつ表示して、もう一回0で上書きして、そのあと1~10をInflateしています。
また11列目にも0~10を上書きしているんですね。
全くもって意味がわかりません。
動作上必要なのでしょうか?
それとも、書いたコードがマズイのでしょうか?
ちょっと調査してみたいと思います。
何かわかったら、またブログに書こうと思いますが、どなたか、詳しい事情をご存知の方は、是非教えてください。
2012/3/2 追記
いならさんにコメントいただき、調査しました。
穀風: ListView は Graphical Layout で作ったまま使ってはいけない
穀風: ListView は Graphical Layout で作ったまま使ってはいけない
2 件のコメント:
自分も同じ現象が発生して困っていました。どうやらListViewのlayout_height、layout_widthにfill_parentを使わなければいけないみたいです。
こちらの記事を参考にしました。
【Androidアプリ】AdapterのgetView()が必要以上に呼ばれる件|べっ、別にWeb言語のことなんか好きじゃないんだからねっ!!///
http://ameblo.jp/shibuya-renga/entry-11062700789.html
おー、まさに、それですね。
有益な情報をありがとうございます!
コメントを投稿