首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android picasso在将图像加载到回收器视图时占用内存

Android picasso在将图像加载到回收器视图时占用内存
EN

Stack Overflow用户
提问于 2016-04-27 20:13:06
回答 4查看 3.4K关注 0票数 1

我有一个RecyclerView,它有很多项(100+)。每一项都是一个ImageView。在每个ImageView中,我使用Picasso库设置Bitmap,如下所示:

代码语言:javascript
复制
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    String photoUrl = photos.get(position).getPath();
    File photoFile = new File(photoUrl);
    Picasso.with(context).load(photoFile).fit().centerCrop().into(holder.photo);
}

我的问题是我在logcat中捕获了stacktrace:

代码语言:javascript
复制
04-27 14:48:43.613 27706-27740/com.rcd.perfecto E/dalvikvm-heap: Out of memory on a 30720016-byte allocation.
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm: "Picasso-/storage/emulated/0/DCIM/Camera/IMG_20150921_100202_HDR.jpg" prio=5 tid=25 RUNNABLE
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:   | group="main" sCount=0 dsCount=0 obj=0x42badb28 self=0x560cd3c0
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:   | sysTid=27740 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1443672328
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:   | state=R schedstat=( 818421079 614394933 1660 ) utm=75 stm=6 core=0
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:627)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:603)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at com.squareup.picasso.BitmapHunter.decodeStream(BitmapHunter.java:142)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:217)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at com.squareup.picasso.BitmapHunter.run(BitmapHunter.java:159)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at java.lang.Thread.run(Thread.java:841)
04-27 14:48:43.613 27706-27740/com.rcd.perfecto I/dalvikvm:     at com.squareup.picasso.Utils$PicassoThread.run(Utils.java:411)

如果我捕捉到了这一点,那么我就会得到OutOfMemoryError,然后应用程序就会崩溃。我能做些什么来防止这种情况发生?

EN

回答 4

Stack Overflow用户

发布于 2016-04-27 20:17:39

尝试在AndroidManefist.xmlApplication标签中添加android:largeHeap="true"

票数 1
EN

Stack Overflow用户

发布于 2017-06-01 18:41:07

最好使用.fit().resize(width, height)

1) .fit() -这将导致请求的延迟执行,直到ImageView布局完成。注意:仅当您的目标是ImageView时,此方法才有效。

2) .resize(width, height) -这会将图像调整到指定的像素大小。

参考:http://square.github.io/picasso/2.x/picasso/

票数 1
EN

Stack Overflow用户

发布于 2016-04-27 20:20:01

尝试使用毕加索缓存策略https://futurestud.io/blog/picasso-influencing-image-caching

或者使用UniversalImageLoader而不是毕加索;-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36889494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档