微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Picasso图像的Java OutOfMemoryError

我正在尝试将图像加载到ImageView中并收到OutOfMemoryError.该图像根据ViewPager中的特定视图动态显示.但是,在我继续滚动浏览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格式

<ImageView
    android:id="@+id/comments_image"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight=".525"
    android:background="@color/black">
</ImageView>

错误

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

解决方法:

您是否在清单文件中做了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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。