penfeizhou / APNG4Android

Android animation support for APNG & Animated WebP & Gif & Animated AVIF, High performance
Apache License 2.0
570 stars 75 forks source link

ANR in FrameAnimationDrawable.getIntrinsicWidth #173

Closed connyduck closed 1 year ago

connyduck commented 1 year ago

New Issue Checklist

Issue Info

Info Value
Device Info google redfin, google barbet, samsung a51, google bramble, google flame
System Version Android 12 & 13
APNG4Android Library Version 2.23.0
Repro rate can't reproduce

Issue Description and Steps

Can't reproduce, but Google Play Developer console shows quite some ANRs with this stacktrace:

 at jdk.internal.misc.Unsafe.park (Unsafe.java)
  at java.util.concurrent.locks.LockSupport.park (LockSupport.java:194)
  at com.github.penfeizhou.animation.decode.FrameSeqDecoder.getBounds (FrameSeqDecoder.java:236)
  at com.github.penfeizhou.animation.FrameAnimationDrawable.getIntrinsicWidth (FrameAnimationDrawable.java:264)
  at android.widget.ImageView.updateDrawable (ImageView.java:1077)
  at android.widget.ImageView.setImageDrawable (ImageView.java:599)
  at androidx.appcompat.widget.AppCompatImageView.setImageDrawable (AppCompatImageView.java:112)
  at com.bumptech.glide.request.target.DrawableImageViewTarget.setResource (DrawableImageViewTarget.java:24)
  at com.bumptech.glide.request.target.DrawableImageViewTarget.setResource (DrawableImageViewTarget.java:8)
  at com.bumptech.glide.request.target.ImageViewTarget.setResourceInternal (ImageViewTarget.java:124)
  at com.bumptech.glide.request.target.ImageViewTarget.onResourceReady (ImageViewTarget.java:101)
  at com.bumptech.glide.request.SingleRequest.onResourceReady (SingleRequest.java:657)
  at com.bumptech.glide.request.SingleRequest.onResourceReady (SingleRequest.java:596)
  at com.bumptech.glide.load.engine.EngineJob.callCallbackOnResourceReady (EngineJob.java:159)
  at com.bumptech.glide.load.engine.EngineJob$CallResourceReady.run (EngineJob.java:428)
  at com.bumptech.glide.load.engine.EngineJob$CallLoadFailed.run$bridge (EngineJob.java:30)
  at android.os.Handler.handleCallback (Handler.java:942)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loopOnce (Looper.java:201)
  at android.os.Looper.loop (Looper.java:288)
  at android.app.ActivityThread.main (ActivityThread.java:7898)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:936)
penfeizhou commented 1 year ago

This can happen because decoding is relatively CPU intensive.