Java OutOfMemoryError使用毕加索图像

Java OutOfMemoryError使用毕加索图像,java,android,xml,imageview,picasso,Java,Android,Xml,Imageview,Picasso,我试图将图像加载到ImageView中,但收到OutOfMemoryError。图像根据ViewPager中的特定视图动态显示。但是,在我一直滚动查看页面后,图像最终无法加载,并导致OutOfMemoryError 请注意,我在ViewPager中有4个视图,应用程序似乎在视图2上崩溃。我猜这张图片的尺寸太大了,但我觉得毕加索会相应地处理: 毕加索密码: Picasso.with(getActivity()) .load(mImageURL) .fit() .memory

我试图将图像加载到ImageView中,但收到OutOfMemoryError。图像根据ViewPager中的特定视图动态显示。但是,在我一直滚动查看页面后,图像最终无法加载,并导致OutOfMemoryError

请注意,我在ViewPager中有4个视图,应用程序似乎在视图2上崩溃。我猜这张图片的尺寸太大了,但我觉得毕加索会相应地处理:

毕加索密码:

Picasso.with(getActivity())
    .load(mImageURL)
    .fit()
    .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_CACHE)
    .into((ImageView) rootView.findViewById(R.id.comments_image));
XML

我建议您使用,因为默认情况下,它设计用于低成本(以及最差的硬件)设备

毕加索和Glide之间的一个巨大区别是Glide的默认格式是
RGB_565
,而毕加索的
ARGB_8888
。正如你在下面看到的,做同样的工作比毕加索节省50%的内存


尽管如此,如果你还不能更改你的库,你可以尝试使用
.resize(int,int)
方法在毕加索的builder上调整你的图像大小。

你在你的manifiest文件中设置了android:largeheap=“true”吗

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="MyApplication"
    android:largeHeap="true"*
    android:logo="@drawable/logo_for_up"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme" >
</application>


图像的分辨率是多少?我知道它是359.2 KB,只是太大了,但我希望了解毕加索如何压缩以防止出现此错误。图像位于这里:正如我不久前所理解的,它更多地与分辨率有关,而与大小有关。虽然我听说过毕加索,但我对他不太熟悉。希望其他人能够更好地帮助您。我注意到错误发生在三星仿真器上,但我正在运行的HTC仿真器没有问题。我想将最大大小设置为100Kb,你知道我该怎么做吗?我不认为毕加索有办法做到这一点,因为它必须计算出哪种大小(宽度和高度的组合)能在你的记忆中产生最大100Kb。我绝对不能使用其他库。我使用毕加索进行一些图像修改,这对我的应用程序来说是必不可少的。我从毕加索切换到Glide,甚至可以消除大量的堆使用。它就像一个符咒。这实际上是做什么的,在我实现它之前,你能帮助我理解吗?在API级别11+上运行的应用程序可以在清单中的元素上有android:largeHeap=“true”来请求比正常堆大的堆大小,以及getLargeMemoryClass()在ActivityManager上,将告诉您该堆有多大。但是无法保证该堆有多大。用户会感知到你的大堆请求,因为这会迫使他们的其他应用程序退出RAM,终止其他应用程序的进程以释放系统RAM供你的大堆使用。使用glide,甚至不要为任何大堆而烦恼。也。。使用大堆会影响垃圾收集器,因此应用程序的速度会变慢。
java.lang.OutOfMemoryError: Failed to allocate a 5074572 byte allocation with 132096 free bytes and 129KB until OOM
     at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
     at android.graphics.Bitmap.nativeCreate(Native Method)
     at android.graphics.Bitmap.createBitmap(Bitmap.java:812)
     at android.graphics.Bitmap.createBitmap(Bitmap.java:789)
     at android.graphics.Bitmap.createBitmap(Bitmap.java:756)
     at android.graphics.drawable.VectorDrawable$VectorDrawableState.createCachedBitmapIfNeeded(VectorDrawable.java:713)
     at android.graphics.drawable.VectorDrawable.draw(VectorDrawable.java:280)
     at com.squareup.picasso.PicassoDrawable.draw(PicassoDrawable.java:105)
     at android.widget.ImageView.onDraw(ImageView.java:1176)
     at android.view.View.draw(View.java:15231)
     at android.view.View.updateDisplayListIfDirty(View.java:14167)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.draw(View.java:15234)
     at android.view.View.updateDisplayListIfDirty(View.java:14167)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1131)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.updateDisplayListIfDirty(View.java:14162)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.draw(View.java:15234)
     at android.support.v4.view.ViewPager.draw(ViewPager.java:2341)
     at android.view.View.updateDisplayListIfDirty(View.java:14167)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.updateDisplayListIfDirty(View.java:14162)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1373)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.updateDisplayListIfDirty(View.java:14162)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.updateDisplayListIfDirty(View.java:14162)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.updateDisplayListIfDirty(View.java:14162)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.updateDisplayListIfDirty(View.java:14162)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.updateDisplayListIfDirty(View.java:14162)
     at android.view.View.getDisplayList(View.java:14189)
     at android.view.View.draw(View.java:14959)
     at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
     at android.view.View.draw(View.java:15234)
     at android.widget.FrameLayout.draw(F
<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="MyApplication"
    android:largeHeap="true"*
    android:logo="@drawable/logo_for_up"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme" >
</application>