android - picasso 在加载图像时内存不足

标签 android out-of-memory picasso

我正在使用 Picasso 从我的服务器加载图像并在 ImageView 中显示它们。

我观察到一些来自用户手机的崩溃报告,其中在 Picasso 尝试将图像加载到 ImageView 时发生内存不足异常。

堆栈跟踪如下:

java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832)
at android.content.res.Resources.loadDrawable(Resources.java:2988)
at android.content.res.Resources.getDrawable(Resources.java:1558)
at android.widget.ImageView.resolveUri(ImageView.java:646)
at android.widget.ImageView.setImageResource(ImageView.java:375)
at com.squareup.picasso.PicassoDrawable.setPlaceholder(PicassoDrawable.java:62)
at com.squareup.picasso.RequestCreator.into(RequestCreator.java:520)
at com.squareup.picasso.RequestCreator.into(RequestCreator.java:462)
at com.mycompany.myAdapter.getView(MyAdapter.java:102)
at android.widget.AbsListView.obtainView(AbsListView.java:2608)
at android.widget.GridView.makeAndAddView(GridView.java:1346)

MyAdapter.java:102 附近的代码如下:

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

    .....Some code .....

    Picasso.with(mContext)
    .load(url_to_server)
    .placeholder(R.drawable.default_placeholder)
    .into(holder.imageItem);  // Line 102

    .....Some code .....

    return convertView;
    }

我使用这个库的方式有问题吗?

最佳答案

我们可以使用 .setImageResource(image) 来加载像启动器图标这样的小图像,但是,加载大图像最好使用 Picasso 并获得简单性和本地缓存的好处。

需要根据文档正确设置Picasso:

“请务必在加载到 ImageView 之前使用 fit() 调整图像大小。否则,如果渲染大量图片,您将消耗额外的内存、滚动缓慢或遇到内存不足的问题。”

if (imageUri != null && !imageUri.isEmpty()) {
   Picasso.with(context).load(imageUri)
  .fit().centerCrop()
  .placeholder(R.drawable.user_placeholder)
  .error(R.drawable.user_placeholder_error)
  .into(imageView);
}

关于android - picasso 在加载图像时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24916867/

相关文章:

android - ListView 中 ImageView startAnimation 的奇怪效果

java - JSoup "wrap"每次都没有按预期工作

reactjs - 我不断收到此错误 "RangeError: Array buffer allocation failed"

android - 从 url 获取图像并在 ImageView 中显示时调整图像大小

java - Picasso 使用 mysql url 在 arraylist hashmap 中加载图像

安卓 picasso : Not Loading in Fragment

java - 非常简单的android java问题

android - 所有图片都在我的手机图库中

大型数组的 PHP 内存错误

java - 在 Java 中解析没有 DOM 的高度嵌套 XML