私はListView
を持っています。これは、各要素に対して1つのイメージと2行のテキスト(RelativeLayout
で編成されています)を持っています。それは正常に動作しますが、それは遅すぎると私は問題がどこから来るのか知っています!Android - ListViewスクロールが遅すぎる
これは私が使用しているカスタムアダプタのgetView()
方法です:
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.list_view_item, parent, false);
mViewHolder = new ViewHolder();
mViewHolder.cover = (ImageView) convertView.findViewById(R.id.app_icon);
mViewHolder.title = (TextView) convertView.findViewById(R.id.selection);
mViewHolder.description = (TextView) convertView.findViewById(R.id.app_short_description);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
// Here is the origin of the issue !
final Feed currentFeed = getItem(position);
mViewHolder.title.setText(currentFeed.getTitle());
mViewHolder.description.setText(currentFeed.getDescription());
try {
if(currentFeed.getThumbnailUrl() != null) {
downloadThumbnail(mViewHolder.cover, currentFeed.getThumbnailUrl());
}
} catch(Exception e) {
e.printStackTrace();
}
return convertView;
}
private static class ViewHolder {
TextView title;
TextView description;
ImageView cover;
}
をだから私はいくつかの手動ベンチマークを行っている、Feed
のインスタンスを割り当てることは、この遅さの源であることが表示されます:
final Feed currentFeed = getItem(position);
私は2つを比較するには、この別のバージョンを書かれているので、私はこれを知っている:
// Here is the origin of the issue !
//final Feed currentFeed = getItem(position);
mViewHolder.title.setText("Title");
mViewHolder.description.setText("Description");
try {
if(currentFeed.getThumbnailUrl() != null) {
downloadThumbnail(mViewHolder.cover, "some url");
}
} catch(Exception e) {
e.printStackTrace();
}
これは方法がスムーズになりました(downloadThumbnail()
メソッドが動作していても)。
また、私の正確なことは、私のListView
に15項目しかありません。
ガベージコレクションのためにオブジェクトを割り当てるのは非常に高価ですが、それ以外の方法はありません。
ありがとうございます!
EDIT
はdownloadThumbnail()メソッドについてはあまり気にしないでください、それはすでにいくつかのキャッシングを行います。実際には写真がなくても、それはまだ遅いです。
何のgetItem()およびdownloadThumbnail()メソッド行う? – Maxim