【问题标题】:ListView lag only when loading image for the FIRST time with PicassoListView 仅在第一次使用 Picasso 加载图像时滞后
【发布时间】:2014-03-03 00:39:56
【问题描述】:

我在 ListView 中使用 ViewHolder 设置,所以我确信这不是回收问题。

ListView 仅在第一次加载图像时滞后,如果我向上滚动,一切都很顺利。

我的简化 getView 方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
...

    mPicasso.load(cData.get("url")).into(holder.imagePreviewView);

...
}

我的 ImageView 的 XML:

 <ImageView
     android:id="@+id/imagePreview"
     android:layout_width="fill_parent"
     android:layout_height="@dimen/image_preview_height"
     android:scaleType="centerCrop"
     android:background="?attr/postPreviewBground" />

谢谢!

【问题讨论】:

  • 您是否将 listview 的 layout_height 设置为 wrap_content。这可能会导致初始延迟
  • 我将它们设置为 match_parent。
  • 延迟是因为你在主线程而不是非 ui 线程上加载图像,从线程加载图像并且最初只有图像的占位符
  • 把它放在另一个线程上会有所帮助,但它仍然口吃太多了。
  • 我也有同样的问题!!!感谢您打开这个问题! ....在我的情况下,图像已经在磁盘中。这里我如何称呼毕加索: /* 代码 */ Picasso.with(mContext).load(new File(cursor.getString(columnIndex))) .fit().centerInside() .placeholder(R.drawable.image_while_loading) .error (R.drawable.image_loading_erro).into(imagem);

标签: android listview picasso


【解决方案1】:

系统很可能会执行 GC_FOR_ALLOC 来为您正在加载的位图分配内存。由于位图已经加载并缓存在内存中,因此向后滚动很顺畅。

【讨论】:

    【解决方案2】:

    我很容易解决了这个错误。您必须在 getView() 中抛出一个线程,并在该线程内编写您拥有的代码。

    试试这个,它有效!

    【讨论】:

    • 我收到java.lang.IllegalStateException: Method call should happen from the main thread. at com.squareup.picasso.Utils.checkMain(Utils.java:136)
    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多