web-dev-qa-db-fra.com

Erreur: RuntimeException sur DisplayListCanvas.throwIfCannotDraw

Mon application fonctionne très bien sur l'émulateur de nougat et de nombreux appareils, mais j'ai trouvé cette exception dans Google Play crash reporter, je ne sais pas pourquoi cela s'est produit, l'exception provoque uniquement avec les appareils de nougat ++.

l'éxéption :

   Java.lang.RuntimeException: 
  at Android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.Java:260)
  at Android.graphics.Canvas.drawBitmap(Canvas.Java:1420)
  at Android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.Java:545)
  at Android.view.View.getDrawableRenderNode(View.Java:18591)
  at Android.view.View.drawBackground(View.Java:18527)
  at Android.view.View.draw(View.Java:18315)
  at Android.view.View.updateDisplayListIfDirty(View.Java:17302)
  at Android.view.View.draw(View.Java:18086)
  at Android.view.ViewGroup.drawChild(ViewGroup.Java:3966)
  at Android.view.ViewGroup.dispatchDraw(ViewGroup.Java:3752)
  at Android.view.View.updateDisplayListIfDirty(View.Java:17297)
  at Android.view.View.draw(View.Java:18086)
  at Android.view.ViewGroup.drawChild(ViewGroup.Java:3966)
  at Android.view.ViewGroup.dispatchDraw(ViewGroup.Java:3752)
  at Android.view.View.updateDisplayListIfDirty(View.Java:17297)
  at Android.view.View.draw(View.Java:18086)
  at Android.view.ViewGroup.drawChild(ViewGroup.Java:3966)
  at Android.view.ViewGroup.dispatchDraw(ViewGroup.Java:3752)
  at Android.view.View.updateDisplayListIfDirty(View.Java:17297)
  at Android.view.View.draw(View.Java:18086)
  at Android.view.ViewGroup.drawChild(ViewGroup.Java:3966)
  at Android.view.ViewGroup.dispatchDraw(ViewGroup.Java:3752)
  at Android.view.View.updateDisplayListIfDirty(View.Java:17297)
  at Android.view.View.draw(View.Java:18086)
  at Android.view.ViewGroup.drawChild(ViewGroup.Java:3966)
  at Android.view.ViewGroup.dispatchDraw(ViewGroup.Java:3752)
  at Android.view.View.draw(View.Java:18327)
  at com.Android.internal.policy.DecorView.draw(DecorView.Java:919)
  at Android.view.View.updateDisplayListIfDirty(View.Java:17302)
  at Android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.Java:692)
  at Android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.Java:698)
  at Android.view.ThreadedRenderer.draw(ThreadedRenderer.Java:806)
  at Android.view.ViewRootImpl.draw(ViewRootImpl.Java:3135)
  at Android.view.ViewRootImpl.performDraw(ViewRootImpl.Java:2931)
  at Android.view.ViewRootImpl.performTraversals(ViewRootImpl.Java:2523)
  at Android.view.ViewRootImpl.doTraversal(ViewRootImpl.Java:1522)
  at Android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.Java:7098)
  at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:927)
  at Android.view.Choreographer.doCallbacks(Choreographer.Java:702)
  at Android.view.Choreographer.doFrame(Choreographer.Java:638)
  at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:913)
  at Android.os.Handler.handleCallback(Handler.Java:751)
  at Android.os.Handler.dispatchMessage(Handler.Java:95)
  at Android.os.Looper.loop(Looper.Java:154)
  at Android.app.ActivityThread.main(ActivityThread.Java:6682)
  at Java.lang.reflect.Method.invoke(Native Method:0)
  at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1520)
  at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1410)

Quelle pourrait être cette erreur?

ATTENTION: tout le drawable que j'ai utilisé est inférieur à 1MB.

13
user7913931

J'ai eu exactement le même problème avec Samsung Galaxy S6 S7 S8. Dans mon cas, Splash Screen avait une haute résolution et il a été placé par erreur dans le dossier dessinable. J'ai trouvé la solution de this answer.

  1. Clic droit sur drawable -> New -> Directory.
  2. Entrez le nouveau nom du répertoire: xxhdpi. Il va créer un nouveau dossier nommé drawable-xxhdpi si vous allez dans res
  3. Déplacez votre image de démarrage de drawable vers drawable-xxhdpi.
2
Shuvo Joseph

Redimensionnez simplement votre image dans mon cas, mes dimensions d'image de l'écran Splash sont de 1544x2100 donc j'ai changé en 1080x2100 et cela fonctionnera !! J'espère que cela vous aidera !!! Merci!!!

0
Divyaraj

Essayez de définir un point de débogage dans Android.view.DisplayListCanvas.throwIfCannotDraw et vérifiez quelle image renvoie une exception. Certains d'entre eux sont incorrects - grande taille ou vous avez trop d'images par exemple et vous ne pouvez pas enregistrer dans le pool de canevas.

0
mzherdev