for (int i = 1; i <= content.getPptPageCount(); i++) {
final String thumbNailPath = ImageUtils.getThumbNailPathsForLocalContent(contentID, i);
final Bitmap bmp = Picasso.with(AppManagers.getAppContext().getContext())
.load(ProxyPathHandler.getProxyURLSlide(content.getPresentationFileID(), i))
.get();
ImageUtils.writeBitmapToFile(bmp, thumbNailPath);
thumbNailPathList.add(thumbNailPath);
}
从get()
尝试Picasso
位图时,我收到此错误
引起:java.lang.OutOfMemoryError:无法分配49486856 字节分配有16777216个空闲字节,31MB直到OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method)〜[na:0.0] 在android.graphics.BitmapFactory.nativeDecodeStream(Native方法)〜[na:0.0] 在android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:773) 〜[NA:0.0] 在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:749) 〜[NA:0.0] 在com.squareup.picasso.BitmapHunter.decodeStream(BitmapHunter.java:142) 〜[NA:0.0] 在com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:217)〜[na:0.0] 在com.squareup.picasso.RequestCreator.get(RequestCreator.java:396) 〜[NA:0.0] 在com.allego.android.app.manager.ContentManager $ 70.call(ContentManager.java:2969) 〜[NA:0.0] 在com.allego.android.app.manager.ContentManager $ 70.call(ContentManager.java:2947) 〜[NA:0.0] at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:35) 〜[NA:0.0] 在io.reactivex.Single.subscribe(Single.java:2702)〜[na:0.0] at io.reactivex.internal.operators.single.SingleSubscribeOn $ SubscribeOnObserver.run(SingleSubscribeOn.java:89) 〜[NA:0.0] 在io.reactivex.Scheduler $ DisposeTask.run(Scheduler.java:451)〜[na:0.0] at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) 〜[NA:0.0]
我有点可以通过添加
来解决这个问题 android:largeHeap="true"
android:hardwareAccelerated="false"
但我想提前找到另一种解决方案。
答案 0 :(得分:1)
您需要加载较小的图像。如果您正在寻找缩略图,则应该有一项服务可以将图像缩放为缩略图大小。也许160x160像素并以这种方式管理它。你正在处理太大的图像。
但是,如果你坚持使用大图像,你至少可以让Picassa为你或Glide缩放它们。
例如。 Glide可以覆盖大小,因此您不必花费所有内存资源来绘制像素。
{{1}}
Picassa会做同样的事情。
答案 1 :(得分:0)
您可以如下计算分配图像所需的内存量:
Memory (Byte) = width(pixel) * height(pixel) * sf (scaling factor) * depth (bytes/pixel)
其中:
宽度和高度:图像尺寸像素。
sf::电话密度(dp /像素比率)。例如,在480 dpi规格=> 480/160 = 3或xxhdpi
的电话中
深度::图像的位深度。例如,您可以通过简单的Linux命令identify -verbose fullImageName
找到该值。
希望对您有帮助。