簡體   English   中英

某些設備上的android UI滯后

[英]android UI lag on some devices

我有一個包含viewpager和導航抽屜的android項目。 在viewpager的每個片段中,我都有一個包含服務器負載數據的gridview! 我的問題是,從低硬件到功能強大的所有設備,一切都可以正常工作,但是在某些設備(例如galaxy s4和某些Sony xperia)中,它在滾動gridview或打開導航抽屜時會產生很大的延遲。 它出什么問題了?

PS:下面是gridview適配器的代碼:

public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.grid_item, parent, false);
    }
    SimpleData item = myDatas.get(position);
    ((TextView) convertView.findViewById(R.id.title)).setText(item.getName());
    ImageView thumbnail = (ImageView) convertView.findViewById(R.id.thumbnail);
    thumbnail.getLayoutParams().height = thumbnail.getLayoutParams().width;

    if (item.getThumbnail() != null && !item.getThumbnail().isEmpty()) {
        if (item.getThumbnail().startsWith("http")) {
            Picasso.with(mContext)
                    .load(item.getThumbnail())
                    .placeholder(R.drawable.loading)
                    .into(thumbnail);
        } else {
            Picasso.with(mContext)
                    .load(Uri.fromFile(new File(item.getThumbnail())))
                    .placeholder(R.drawable.loading)
                    .into(thumbnail);
        }
    } else {
        thumbnail.setImageResource(R.drawable.noimage);
    }

    ((TextView) convertView.findViewById(R.id.province)).setText(item.getProvince());
    ((TextView) convertView.findViewById(R.id.likesCount)).setText(item.getLikesCount() + "");

    convertView.forceLayout();
    return convertView;
}

終於我找到了問題! 滯后的原因是代碼的其他部分在UI線程的Line下方設置了圖像:

 thumbnail.setImageResource(R.drawable.noimage);

因此,我用compress之一替換了可繪制的“ noimage”,並更改了這一行以使用Picasso加載文件,如下所示,一切正常。

 Picasso.with(mContext)
                .load(R.drawable.noimage)
                .placeholder(R.drawable.loading)
                .into(thumbnail);

謝謝大家的幫助。

您正在做很多事情,在這里不建議這樣做,這可能是造成延遲的原因。

首先不要使用convertView.forceLayout(); ,根據其文檔,它將強制您的布局在不需要時進行渲染。 其次,你膨脹convertView ,你應該做的是,在getView適配器的。 記住,您要重寫一個類,而不是您要為布局誇大,它是由適配器類在較高級別自動完成的。

最后,您不使用以下形式的適配器設計模式:

if (convertView == null) {
  ...
} else {
  ...
}

有關后者的更多信息,請參考本文檔 ,其中有一個ImageAdapter示例。

您的getView方法正在做很多事情,您應該了解如何在GridView中異步加載位圖,並且這樣做不會滯后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM