Picasso OutOfMemoryError: - PullRequest
       8

Picasso OutOfMemoryError:

0 голосов
/ 01 мая 2018
  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 свободных байтов и 31 МБ до OOM at dalvik.system.VMRuntime.newNonMovableArray (собственный метод) ~ [na: 0.0] на android.graphics.BitmapFactory.nativeDecodeStream (собственный метод) ~ [na: 0.0] на android.graphics.BitmapFactory.decodeStreamInternal (BitmapFactory.java:773) ~ [Па: 0,0] на android.graphics.BitmapFactory.decodeStream (BitmapFactory.java:749) ~ [Па: 0,0] в com.squareup.picasso.BitmapHunter.decodeStream (BitmapHunter.java:142) ~ [Па: 0,0] на com.squareup.picasso.BitmapHunter.hunt (BitmapHunter.java:217) ~ [na: 0.0] на com.squareup.picasso.RequestCreator.get (RequestCreator.java:396) ~ [Па: 0,0] на com.allego.android.app.manager.ContentManager $ 70.call (ContentManager.java:2969) ~ [Па: 0,0] на com.allego.android.app.manager.ContentManager $ 70.call (ContentManager.java:2947) ~ [Па: 0,0] в io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual (SingleFromCallable.java:35) ~ [Па: 0,0] на io.reactivex.Single.subscribe (Single.java:2702) ~ [na: 0.0] в io.reactivex.internal.operators.single.SingleSubscribeOn $ SubscribeOnObserver.run (SingleSubscribeOn.java:89) ~ [Па: 0,0] в io.reactivex.Scheduler $ DisposeTask.run (Scheduler.java:451) ~ [na: 0.0] в io.reactivex.internal.schedulers.ScheduledRunnable.run (ScheduledRunnable.java:61) ~ [Па: 0,0]

Я могу решить эту проблему, добавив

 android:largeHeap="true"
 android:hardwareAccelerated="false"

Но я бы хотел найти другое решение, спасибо заранее.

1 Ответ

0 голосов
/ 02 мая 2018

Вам необходимо загрузить меньшие изображения. Если вы ищете миниатюры, у вас должен быть сервис, который масштабирует изображения до размеров миниатюр. Может быть, 160x160 px и справиться с этим. Вы обрабатываете слишком большие изображения.

Однако, если вы настаиваете на использовании больших изображений, вы можете по крайней мере разрешить Picassa масштабировать их для вас или Glide.

Например. Glide может изменить размер, поэтому вы не тратите все ресурсы памяти на рисование пикселей.

Glide
 .with(context)
 .load(yourImageUrl)
 .override(200, 200)
 .into(imageView);

Picassa сделает то же самое.

...