8

Android リストビューで baseadapter をオーバーライドする場合は、このメソッドを実装する必要がありますpublic View getView(int position, View convertView, ViewGroup parent)。convertview は、以前にスクロール時にリストから押し出されたビューであり、新しいビューを作成する代わりにそのビューを再利用できるように提供されています。

私の質問は、ビューを再利用することが本当に必要ですか? データの一部だけが変更された場合、それを再利用することは理解できます。しかし、ビューを作成するオーバーヘッドは本当にそれほど重要なのでしょうか? 私が見たリストビューの使用に関するすべてのチュートリアルでは、テキストビューのような単純なビューであっても、ビューをリサイクルするように指示されています。

私の質問は、なぜGoogleがこれをgetViewメソッドのデフォルトの動作にすることにしたのですか?

4

2 に答える 2

13

ビューをリサイクルするいくつかの理由:

  • オブジェクトの作成には比較的コストがかかります。作成されるすべての追加オブジェクトは、ガベージ コレクション システムによって処理される必要があり、少なくとも一時的にメモリ フットプリントが増加します。
  • これは、より複雑なビューではより重要ですが、ビュー オブジェクトの膨張とレイアウトにはコストがかかる可能性があります。ほとんどの場合、レイアウトに影響を与えない getView のビューに小さな変更 (テキストの設定など) を加えるだけなので、レイアウトのオーバーヘッドを回避できる可能性があります。
  • Android は、リソースに制約のある環境で実行するように設計されていることに注意してください。
  • 最後に、それはすでにあなたのために行われており、それは確かに何も害を及ぼさないので、なぜそれを使用しないのですか?
于 2010-09-28T23:14:21.233 に答える
7

それは必要ですか?Nexus One でフリング中に追加の 30 ~ 40 fps が必要な場合のみ。:) ( http://code.google.com/events/io/2010/sessions/world-of-listview-android.htmlのスライド 13 ~ 17 を参照)

95% 完了した重要な最適化を無視して、デバイスが必要のない機能を実行するのはなぜですか?

于 2010-09-29T03:40:59.063 に答える