滚动时android自定义 ListView 非常慢

标签 android scroll performance android-listview

伙计们,我的 ListView 有问题。滚动时运行速度很慢任何人都可以帮助我。 我的 ListView 是使用相对的自定义布局,每行有 3 个 TextView 和 1 个 ImageView ,所有内容都是从网络上检索的。 我使用自定义适配器和 View 持有者。

下面是我如何使用适配器的代码。

public class MessageList extends ListActivity {


    @Override
    public void onCreate(Bundle icicle) {
     super.onCreate(icicle);
        setContentView(R.layout.listarticle);

        loadFeed(link);
        setListAdapter(new IconAdapter(this));

    }

 /* This method load xml file and parse it into message object*/
 private void loadFeed(String link){
     try{
      BaseFeedParser parser = new BaseFeedParser(link);
      messages = parser.parse();
      titles = new ArrayList<String>(messages.size());
      image = new ArrayList<String>(messages.size());
      date_post = new ArrayList<String>(messages.size());
      descs = new ArrayList<String>(messages.size());
      for (Message msg : messages){
       titles.add(msg.getTitle());
       image.add(msg.getImageLink().toString());
       date_post.add(msg.getDate());
       descs.add(msg.getDescription());

      }
       } catch (Throwable t){
      Log.e("AndroidNews",t.getMessage(),t);
     }
    }

 /*this is my custom baseadapter */
 class IconAdapter extends BaseAdapter{
  private LayoutInflater mInflater;


  public IconAdapter(Context cxt){
   mInflater = LayoutInflater.from(cxt);


  }

  public class ViewHolder{
   private TextView title;
   private TextView date;
   private TextView desc;
   private ImageView thumb;
  }

  public View getView(int positiion, View convertView, ViewGroup parent){
   ViewHolder holder;

   if (convertView==null){
    convertView = mInflater.inflate(R.layout.row, null);

    holder = new ViewHolder();

    holder.title = (TextView) convertView.findViewById(R.id.title);
    holder.date = (TextView) convertView.findViewById(R.id.date);
    holder.desc = (TextView) convertView.findViewById(R.id.deskripsi);
    holder.thumb = (ImageView) convertView.findViewById(R.id.thumbnail);

    convertView.setTag(holder);
   }else{

    holder = (ViewHolder) convertView.getTag();
   }

   holder.title.setText(titles.get(positiion));
   holder.date.setText(date_post.get(positiion));
   holder.desc.setText(descs.get(positiion).substring(0, 55)+"...");
   Drawable draw = LoadImageFromWebOperation(image.get(positiion));

   holder.thumb.setImageDrawable(draw);

   return convertView;
  }
  /* this method take image from url that retrieve from xml*/
  public Drawable LoadImageFromWebOperation(String url){
   try{
    InputStream is = (InputStream) new URL(url).getContent();
    Drawable d = Drawable.createFromStream(is, "src name");
    return d;
   }catch (Exception e){
    Log.d("image", url, e);
    return null;
   }
  }

  @Override
  public int getCount() {
   return messages.size();
  }

  @Override
  public Object getItem(int position) {
   return messages.get(position);
  }

  @Override
  public long getItemId(int position) {
   return position;
  }

 }

最佳答案

  public View getView(int positiion, View convertView, ViewGroup parent){
      ...
      Drawable draw = LoadImageFromWebOperation(image.get(positiion));
      ...
  }

这就是问题所在。你永远不应该在 UI 线程中做网络。为作业实现一些异步任务。 此外,您可以使用 traceview http://developer.android.com/guide/developing/tools/traceview.html确定性能瓶颈的工具。

关于滚动时android自定义 ListView 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4507079/

相关文章:

android - 尝试安装 HAXM 时出错 - Intel VT-x 已关闭

Android Studio Kotlin Complier Error node.sym must not be null

swift - UICollectionView 项目数据在 Swift 4.2 中滚动后扭曲

MongoDB - 聚合性能调优

performance - UIWebView 性能只针对文本?

c# - 在 IEnumerable 上调用 Count 是否会迭代整个集合?

android - View 的 layout_weight 值异常

android - 使用 WorkManager 时出现 Java.util.concurrent.RejectedExecutionException

ios - UITableView ScrollToRow 函数奇怪地动画

javascript - 自动滚动到 div 底部