官网参考地址:http://developer.android.com/training/improving-layouts/smooth-scrolling.html
官网给出的方案:
1,使用后台线程,磁盘,网络,数据库访问在独立线程中执行
2,使用ViewHolder静态类来维护view对象,减少 findViewById()的调用
// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {
private ViewHolder v;
@Override
protected Bitmap doInBackground(ViewHolder... params) {
v = params[0];
return mFakeImageLoader.getImage();
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// If this item hasn't been recycled already, hide the
// progress and set and show the image
v.progress.setVisibility(View.GONE);
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}
}.execute(holder);
参考博客:http://blog.csdn.net/long704480904/article/details/8144939
1,使用ConverView
-It reuses the convertView passed to getView() to avoid inflating View when it is not necessary
(译:重用缓存convertView传递给getView()方法来避免填充不必要的视图)
2,使用ViewHolder静态类
-It uses the ViewHolder pattern to avoid calling findViewById() when it is not necessary
(译:使用ViewHolder模式来避免没有必要的调用findViewById():因为太多的findViewById也会影响性能)
ViewHolder类的作用
-The ViewHolder pattern consists in storing a data structure in the tag of the view
returned by getView().This data structures contains references to the views we want to bind data to,
thus avoiding calling to findViewById() every time getView() is invoked
(译:ViewHolder模式通过getView()方法返回的视图的标签(Tag)中存储一个数据结构,这个数据结构包含了指向我们
要绑定数据的视图的引用,从而避免每次调用getView()的时候调用findViewById())
static class ViewHolder {
public ImageView usrhead;
public TextView update;
public TextView nickname;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.usr_grid_item, null);
viewHolder = new ViewHolder();
viewHolder.usrhead = (ImageView) convertView
.findViewById(R.id.iv_usrhead);
viewHolder.update = (TextView) convertView
.findViewById(R.id.tv_update);
viewHolder.nickname = (TextView) convertView
.findViewById(R.id.tv_nickname);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.nickname.setText(gridItemList.get(position).getNickname());
if (gridItemList.get(position).getUpdate() > 0) {
viewHolder.update.setText(gridItemList.get(position).getUpdate()
+ "");
} else {
viewHolder.update.setText("0");
}
if (gridItemList.get(position).getUpdate() > 0) {
viewHolder.update.setText(gridItemList.get(position).getUpdate()
+ "");
} else {
viewHolder.update.setText("0");
}
Bitmap bitmap = decodebitmap(position);
if (null == bitmap) {
viewHolder.usrhead.setImageResource(R.drawable.person);
} else {
viewHolder.usrhead.setImageBitmap(bitmap);
}
return convertView;
}