wordpress-mobile / AztecEditor-Android

A reusable native Android rich text editor component.
Mozilla Public License 2.0
675 stars 112 forks source link

Display large image crash #509

Closed liufsd closed 6 years ago

liufsd commented 6 years ago
10-23 18:42:57.481 24008-24008/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: com.hujiang.cctalk, PID: 24008
                                                   java.lang.RuntimeException: Canvas: trying to draw too large(119007792bytes) bitmap.
                                                       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 org.wordpress.aztec.spans.AztecMediaSpan.draw(:92)
                                                       at android.text.TextLine.handleReplacement(TextLine.java:829)
                                                       at android.text.TextLine.handleRun(TextLine.java:912)
                                                       at android.text.TextLine.drawRun(TextLine.java:368)
                                                       at android.text.TextLine.draw(TextLine.java:196)
                                                       at android.text.Layout.drawText(Layout.java:404)
                                                       at android.widget.Editor.drawHardwareAccelerated(Editor.java:1903)
                                                       at android.widget.Editor.onDraw(Editor.java:1822)
                                                       at android.widget.TextView.onDraw(TextView.java:6691)
                                                       at android.view.View.draw(View.java:18319)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:17297)
                                                       at android.view.View.draw(View.java:18081)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:17292)
                                                       at android.view.View.draw(View.java:18081)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
                                                       at android.support.v7.widget.RecyclerView.drawChild(:3838)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
                                                       at android.view.View.draw(View.java:18322)
                                                       at android.support.v7.widget.RecyclerView.draw(:3308)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:17297)
                                                       at android.view.View.draw(View.java:18081)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:17292)
                                                       at android.view.View.draw(View.java:18081)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
                                                       at android.view.View.draw(View.java:18322)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:17297)
                                                       at android.view.View.draw(View.java:18081)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:17292)
                                                       at android.view.View.draw(View.java:18081)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:17292)
                                                       at android.view.View.draw(View.java:18081)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3966)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3752)
                                                       at android.view.View.draw(View.java:18322)
                                                       at com.android.internal.policy.DecorView.draw(DecorView.java:854)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:17297)
                                                       at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:666)
                                                       at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:672)
                                                       at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:780)
                                                       at android.view.ViewRootImpl.draw(ViewRootImpl.java:3105)
                                                       at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2901)
                                                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2495)
                                                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1502)
                                                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7044)
                                                       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:6646)
                                                       at java.lang.reflect.Method.invoke(Native Method)
10-23 18:42:57.481 24008-24008/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
10-23 18:42:57.634 23845-24881/? E/GCM: Wifi connection closed with errorCode 19
10-23 18:42:58.328 23845-24886/? E/InstantApps: DomainFilterImpl: Error while reading domain filter from WHAPI
                                                java.util.concurrent.ExecutionException: bafm: UNAVAILABLE
                                                    at java.util.concurrent.FutureTask.report(FutureTask.java:94)
                                                    at java.util.concurrent.FutureTask.get(FutureTask.java:164)
                                                    at vbi.get(:com.google.android.gms@11518448:2)
                                                    at vfo.a(:com.google.android.gms@11518448:7)
                                                    at vfo.a(:com.google.android.gms@11518448:54)
                                                    at vfo.a(:com.google.android.gms@11518448:120)
                                                    at vfl.a(:com.google.android.gms@11518448:1)
                                                    at com.google.android.gms.instantapps.routing.DomainFilterUpdateChimeraService.a(:com.google.android.gms@11518448:10)
                                                    at ssv.run(:com.google.android.gms@11518448:1)
                                                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                    at java.lang.Thread.run(Thread.java:762)
                                                 Caused by: bafm: UNAVAILABLE
                                                    at bafi.c(:com.google.android.gms@11518448:3)
                                                    at mgv.a(:com.google.android.gms@11518448:66)
                                                    at vaw.b(:com.google.android.gms@11518448:50)
                                                    at vaw.a(:com.google.android.gms@11518448)
                                                    at vbj.call(:com.google.android.gms@11518448:2)
                                                    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                    at mmo.run(:com.google.android.gms@11518448:25)
                                                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                    at mrv.run(:com.google.android.gms@11518448)
                                                    at java.lang.Thread.run(Thread.java:762) 
                                                 Caused by: javax.net.ssl.SSLHandshakeException: Connection closed by peer
                                                    at com.google.android.gms.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
                                                    at com.google.android.gms.org.conscrypt.OpenSSLSocketImpl.startHandshake(:com.google.android.gms@11518448:24)
                                                    at com.google.android.gms.common.net.SSLCertificateSocketFactory.verifyHostname(:com.google.android.gms@11518448:2)
                                                    at com.google.android.gms.common.net.SSLCertificateSocketFactory.createSocket(:com.google.android.gms@11518448:8)
                                                    at bahc.a(:com.google.android.gms@11518448:1)
                                                    at bagv.run(:com.google.android.gms@11518448:56)
                                                    at io.grpc.internal.ee.run(:com.google.android.gms@11518448:2)
                                                    at mmo.run(:com.google.android.gms@11518448:25) 
                                                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                                                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                                                    at mrv.run(:com.google.android.gms@11518448) 
                                                    at java.lang.Thread.run(Thread.java:762) 
10-23 18:43:04.807 6554-8460/? E/Watchdog: !@Sync 3702 [2017-10-23 18:43:04.806]
10-23 18:43:04.834 23845-23845/? E/ctxmgr: [BaseServerTask]Server task (FetchAclSet) got error statusCode=-1.
                                           com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: Connection closed by peer
                                               at com.android.volley.toolbox.BasicNetwork.performRequest(:com.google.android.gms@11518448:30)
                                               at mgz.performRequest(:com.google.android.gms@11518448:4)
                                               at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@11518448:12)
                                            Caused by: javax.net.ssl.SSLHandshakeException: Connection closed by peer
                                               at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
                                               at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357)
                                               at android.net.SSLCertificateSocketFactory.verifyHostname(SSLCertificateSocketFactory.java:243)
                                               at android.net.SSLCertificateSocketFactory.createSocket(SSLCertificateSocketFactory.java:495)
                                               at com.android.okhttp.Connection.connectTls(Connection.java:1471)
                                               at com.android.okhttp.Connection.connectSocket(Connection.java:1435)
                                               at com.android.okhttp.Connection.connect(Connection.java:1390)
                                               at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:1667)
                                               at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:133)
                                               at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:466)
                                               at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:371)
                                               at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:503)
                                               at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:130)
                                               at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:261)
                                               at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
                                               at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java)
                                               at tqc.a(:com.google.android.gms@11518448:50)
                                               at tqc.a(:com.google.android.gms@11518448:76)
                                               at tqc.execute(:com.google.android.gms@11518448:8)
                                               at tqc.execute(:com.google.android.gms@11518448:7)
                                               at com.android.volley.toolbox.HttpClientStack.performRequest(:com.google.android.gms@11518448:16)
                                               at mgy.performRequest(:com.google.android.gms@11518448:1)
                                               at com.android.volley.toolbox.BasicNetwork.performRequest(:com.google.android.gms@11518448:7)
                                               at mgz.performRequest(:com.google.android.gms@11518448:4) 
                                               at com.android.volley.NetworkDispatcher.run(:com.google.android.gms@11518448:12) 
10-23 18:43:04.845 23845-18738/? E/ctxmgr: [AccountAclCallback]Failed Acl fetch: network status=-1
daniloercoli commented 6 years ago

Would you mind to provide device model?

liufsd commented 6 years ago

Sumsung S7 edge

daniloercoli commented 6 years ago

How big is the bitmap you're adding to the editor? Try to pass a smaller image (less than 800px) to the editor and see what happens.

liufsd commented 6 years ago

ok. two steps to fix this issue: 1.Compress image (max: screen width) 2.Enable option :

        android:largeHeap="true"
        android:hardwareAccelerated="false"

i will test it tomorrow

liufsd commented 6 years ago

now, it will not crash. but if two large image in textview, it will scroll so slowly.

daniloercoli commented 6 years ago

This is more a problem of Android/Canvas instead of Aztec. It is possible to trigger the same error in a simple app that tries to load a big image in a canvas. It's up to the developer to prevent this to happen.