Fresco: Using placeholder with progressive image throws java.lang.OutOfMemoryError

Created on 11 Aug 2016  路  7Comments  路  Source: facebook/fresco

<com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/post_img"
            android:layout_width="match_parent"
            android:layout_height="240dp"
            android:layout_gravity="center_horizontal"
            android:adjustViewBounds="true"
            android:maxHeight="240dp"
            android:visibility="visible"
            fresco:actualImageScaleType="fitCenter"
            fresco:placeholderImage="@drawable/img_placeholder" />

Uri mUri = Uri.parse(mUrl);
        ImageRequest request = ImageRequestBuilder.newBuilderWithSource(mUri)
                .setProgressiveRenderingEnabled(true)
                .build();
        DraweeController mController = Fresco.newDraweeControllerBuilder()
                .setImageRequest(request)
                .setOldController(mSimpleDraweeView.getController())
                .build();
        mSimpleDraweeView.setController(mController);

placeholderImage size : 7kb

Caused by java.lang.OutOfMemoryError

dalvik.system.VMRuntime.newNonMovableArray (VMRuntime.java)
android.graphics.BitmapFactory.nativeDecodeAsset (BitmapFactory.java)
android.graphics.BitmapFactory.decodeStream (BitmapFactory.java:613)
android.graphics.BitmapFactory.decodeResourceStream (BitmapFactory.java:446)
android.graphics.drawable.Drawable.createFromResourceStream (Drawable.java:988)
android.content.res.Resources.createFromResourceStream (Resources.java:2822)
android.content.res.Resources.loadDrawableForCookie (Resources.java:2523)
android.content.res.Resources.loadDrawable (Resources.java:2421)
android.content.res.MiuiResources.loadDrawable (MiuiResources.java:393)
android.content.res.Resources.getDrawable (Resources.java:805)
android.content.res.Resources.getDrawable (Resources.java:770)
com.facebook.drawee.generic.GenericDraweeHierarchyInflater.getDrawable (GenericDraweeHierarchyInflater.java:227)
com.facebook.drawee.generic.GenericDraweeHierarchyInflater.updateBuilder (GenericDraweeHierarchyInflater.java:116)
com.facebook.drawee.generic.GenericDraweeHierarchyInflater.inflateBuilder (GenericDraweeHierarchyInflater.java:77)
com.facebook.drawee.view.GenericDraweeView.inflateHierarchy (GenericDraweeView.java:58)
com.facebook.drawee.view.GenericDraweeView. (GenericDraweeView.java)
com.facebook.drawee.view.SimpleDraweeView. (SimpleDraweeView.java)
java.lang.reflect.Constructor.newInstance (Constructor.java)
java.lang.reflect.Constructor.newInstance (Constructor.java:288)
android.view.LayoutInflater.createView (LayoutInflater.java:611)
android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:747)
android.view.LayoutInflater.rInflate (LayoutInflater.java:810)
android.view.LayoutInflater.rInflate (LayoutInflater.java:813)
android.view.LayoutInflater.inflate (LayoutInflater.java:508)
android.view.LayoutInflater.inflate (LayoutInflater.java:418)
com.yappily.adapter.PostDetailAdapter.onCreateViewHolder (PostDetailAdapter.java:83)
android.support.v7.widget.RecyclerView$Adapter.createViewHolder (RecyclerView.java:5779)
android.support.v7.widget.RecyclerView$Recycler.getViewForPosition (RecyclerView.java:5003)
android.support.v7.widget.RecyclerView$Recycler.getViewForPosition (RecyclerView.java:4913)
android.support.v7.widget.LinearLayoutManager$LayoutState.next (LinearLayoutManager.java:2029)
android.support.v7.widget.LinearLayoutManager.layoutChunk (LinearLayoutManager.java:1414)
android.support.v7.widget.LinearLayoutManager.fill (LinearLayoutManager.java:1377)
android.support.v7.widget.LinearLayoutManager.onLayoutChildren (LinearLayoutManager.java:578)
android.support.v7.widget.RecyclerView.dispatchLayoutStep2 (RecyclerView.java:3260)
android.support.v7.widget.RecyclerView.dispatchLayout (RecyclerView.java:3069)
android.support.v7.widget.RecyclerView.onLayout (RecyclerView.java:3518)
android.view.View.layout (View.java:15691)
android.view.ViewGroup.layout (ViewGroup.java:5039)
android.support.v4.widget.SwipeRefreshLayout.onLayout (SwipeRefreshLayout.java:598)
android.view.View.layout (View.java:15691)
android.view.ViewGroup.layout (ViewGroup.java:5039)
android.widget.RelativeLayout.onLayout (RelativeLayout.java:1077)
android.view.View.layout (View.java:15691)
android.view.ViewGroup.layout (ViewGroup.java:5039)
android.widget.RelativeLayout.onLayout (RelativeLayout.java:1077)
android.view.View.layout (View.java:15691)
android.view.ViewGroup.layout (ViewGroup.java:5039)
android.widget.FrameLayout.layoutChildren (FrameLayout.java:579)
android.widget.FrameLayout.onLayout (FrameLayout.java:514)
android.view.View.layout (View.java:15691)
android.view.ViewGroup.layout (ViewGroup.java:5039)
android.widget.LinearLayout.setChildFrame (LinearLayout.java:1703)
android.widget.LinearLayout.layoutVertical (LinearLayout.java:1557)
android.widget.LinearLayout.onLayout (LinearLayout.java:1466)
android.view.View.layout (View.java:15691)
android.view.ViewGroup.layout (ViewGroup.java:5039)
android.widget.FrameLayout.layoutChildren (FrameLayout.java:579)
android.widget.FrameLayout.onLayout (FrameLayout.java:514)
android.view.View.layout (View.java:15691)
android.view.ViewGroup.layout (ViewGroup.java:5039)
android.widget.LinearLayout.setChildFrame (LinearLayout.java:1703)
android.widget.LinearLayout.layoutVertical (LinearLayout.java:1557)
android.widget.LinearLayout.onLayout (LinearLayout.java:1466)
android.view.View.layout (View.java:15691)
android.view.ViewGroup.layout (ViewGroup.java:5039)
android.widget.FrameLayout.layoutChildren (FrameLayout.java:579)
android.widget.FrameLayout.onLayout (FrameLayout.java:514)
android.view.View.layout (View.java:15691)
android.view.ViewGroup.layout (ViewGroup.java:5039)
android.view.ViewRootImpl.performLayout (ViewRootImpl.java:2116)
android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1873)
android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1091)
android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:5926)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:775)
android.view.Choreographer.doCallbacks (Choreographer.java:588)
android.view.Choreographer.doFrame (Choreographer.java:558)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:761)
android.os.Handler.handleCallback (Handler.java:739)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:135)
android.app.ActivityThread.main (ActivityThread.java:5276)
java.lang.reflect.Method.invoke (Method.java)
java.lang.reflect.Method.invoke (Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:908)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:703)
bug

All 7 comments

Hi @iamprashant, can you provide us with the placeholder image that causes the problems and information about the device (device type and Android version) where this issue shows up?

About the device type and Version:
screen shot 2016-08-13 at 2 10 13 pm

Placeholder image:
img_placeholder

Stacktrace:
com.yappily_issue_86_crash_57aecd20014a00016488138267c7a66f.txt

i also find the problem,i use fresco in recyclerview loading picture. it occurs oom. the phone system is 5.0.2,the fresco version is 0.9.0+

i have same issue. I can not trust the placeholder now.

As far as my understanding. if i use placeholder image , 20% memory consumption than normal loading in my case.
I used 1.4.0v and some gif loading

facing same problem, also set use largeHeap, still crash

Closing older, stale issues. We don't have enough information to proceed.

Was this page helpful?
0 / 5 - 0 ratings