Android图像网格滚动问题

Android图像网格滚动问题,android,performance,gridview,android-gridview,smooth-scrolling,Android,Performance,Gridview,Android Gridview,Smooth Scrolling,我有以下性能问题。我正在开发一款android平板电脑应用程序,它有一个像画廊一样的gridview。每个项目大约有3个文本视图(短文本)和2个图像视图(1个用于背景,1个用于重要项目的小图标)。目标设备分辨率相当大(1920x800),因此网格矩阵显示的是6 x 5项 我已经实现了这一点,但滚动体验很差。当我慢慢滚动时,任何时候新的6个项目行都会出现短暂冻结。然后该行将出现,滚动正常,直到出现的行结束,新的行应再次出现。滚动回以前可见的行时的相同行为。 有没有人能给我一些优化的建议,可以帮助我

我有以下性能问题。我正在开发一款android平板电脑应用程序,它有一个像画廊一样的gridview。每个项目大约有3个文本视图(短文本)和2个图像视图(1个用于背景,1个用于重要项目的小图标)。目标设备分辨率相当大(1920x800),因此网格矩阵显示的是6 x 5项

我已经实现了这一点,但滚动体验很差。当我慢慢滚动时,任何时候新的6个项目行都会出现短暂冻结。然后该行将出现,滚动正常,直到出现的行结束,新的行应再次出现。滚动回以前可见的行时的相同行为。 有没有人能给我一些优化的建议,可以帮助我顺利地滚动

在我的适配器中,我使用优化特性作为holder类和getView方法中的getTag()。图像不是从web加载的,而是通过setImageURI方法从sd卡加载的

不管怎么说,我期待着这里的问题。以这种方式加载第6行背景图像必须花费一些时间,但我不知道如何解决这个问题。bg图像的平均大小为50 KB。这是我的getView

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(mItemResId, parent, false);
        holder = new ViewHolder();
        holder.tvName = (TextView) convertView.findViewById(R.id.grid_item_name);
        holder.tvPref = (TextView) convertView.findViewById(R.id.grid_item_pref);
        holder.tvCustomText = (TextView) convertView.findViewById(R.id.grid_item_custom);
        holder.ivBg = (ImageView) convertView.findViewById(R.id.grid_item_bg);
        holder.ivSmallIcon = (ImageView) convertView.findViewById(R.id.grid_item_icon);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    Product item = getItem(position);
    holder.tvName.setText(item.getName());
    holder.tvPref.setText(item.getPreference());
    holder.tvCustomText.setText(item.getCustomText());
    if (item.isImportant()) {
        holder.ivSmallIcon.setVisibility(View.VISIBLE);
    } else holder.ivSmallIcon.setVisibility(View.GONE);

    File f = new File( item.getImagePath() );
    if ( f.exists() ) {
        holder.ivBg.setImageURI( Uri.fromFile(f) );
    } else { 
        holder.ivBg.setImageResource(R.drawable.no_img);
    }

    return convertView;
}
或者在调用getView方法之前,是否有可能预取不可见的项目或至少图像?或者其他能帮上忙的事


非常感谢。

最后,我使用了一个非常有用的异步任务

下面的解决方案示例: