【问题标题】:Android App (Webview) crashes because of splashscreenAndroid 应用程序 (Webview) 因闪屏而崩溃
【发布时间】:2017-10-11 13:51:09
【问题描述】:

某些手机(例如三星 S6 或 S7)无法启动我的 android webview 应用程序。这是我从 google play 商店得到的:

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.widget.ImageView.onDraw (ImageView.java:1286)
  at android.view.View.draw (View.java:18318)
  at android.view.View.updateDisplayListIfDirty (View.java:17296)
  at android.view.View.draw (View.java:18080)
  at android.view.ViewGroup.drawChild (ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:3752)
  at android.view.View.updateDisplayListIfDirty (View.java:17291)
  at android.view.View.draw (View.java:18080)
  at android.view.ViewGroup.drawChild (ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:3752)
  at android.view.View.updateDisplayListIfDirty (View.java:17291)
  at android.view.View.draw (View.java:18080)
  at android.view.ViewGroup.drawChild (ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:3752)
  at android.view.View.updateDisplayListIfDirty (View.java:17291)
  at android.view.View.draw (View.java:18080)
  at android.view.ViewGroup.drawChild (ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:3752)
  at android.view.View.updateDisplayListIfDirty (View.java:17291)
  at android.view.View.draw (View.java:18080)
  at android.view.ViewGroup.drawChild (ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:3752)
  at android.view.View.updateDisplayListIfDirty (View.java:17291)
  at android.view.View.draw (View.java:18080)
  at android.view.ViewGroup.drawChild (ViewGroup.java:3966)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:3752)
  at android.view.View.draw (View.java:18321)
  at com.android.internal.policy.DecorView.draw (DecorView.java:919)
  at android.view.View.updateDisplayListIfDirty (View.java:17296)
  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:3128)
  at android.view.ViewRootImpl.performDraw (ViewRootImpl.java:2924)
  at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2516)
  at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1515)
  at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:7091)
  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)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1520)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410)

这似乎是我的启动画面,就是这样:

activity_main.xml:

//splashscreen fullscreen
<ImageView
    android:id="@+id/splash1"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:adjustViewBounds="true"
    android:screenOrientation="portrait"
    android:visibility="visible"
    android:src="@drawable/redsplashscreen"
    />

//shows the webview fullscreen
<WebView
    android:id="@+id/web1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone"

MainActivity.java sn-p:

boolean splashFinished = false;

    @Override
    public void onPageFinished(WebView view, String url) {
        //loads splashscreen once till website is loaded
        if (!splashFinished) {
            //hides loading image
            findViewById(R.id.splash1).setVisibility(View.GONE);
            //shows webview
            findViewById(R.id.web1).setVisibility(View.VISIBLE);
            splashFinished = true;
        }

这里有人说我必须将图像从“drawable”-folder移动到“drawable-xxhd”,我试过了,但是当我想创建一个APK时,android studio将它移回并更改代码的xml。

顺便说一句,图片不是很大,我将大小从 1.7MB 更改为 0.7MB。

【问题讨论】:

  • 你能显示详细代码吗?
  • 你还想看什么?
  • 详细 Logcat 和更多关于 MainActivity 的代码。
  • 减小启动画面的大小。问题源于绘制图像。
  • 我将它减少到 0.7 mb。这还大吗?

标签: java android xml webview


【解决方案1】:

在我的情况下,某些手机无法处理大的飞溅图像文件。 我的是 1.xMB,在我减小文件大小后,不再崩溃。

减小文件大小。

【讨论】:

  • 图片小于1MB。
  • 尝试其他图片。非常小。
【解决方案2】:

我有一个解决方案:在 android studio 中,我创建了“drawable-xxhdpi”-文件夹(右键单击“res”-> 新建-> 目录)。我在这个文件夹中放置了相同的启动画面图像。这样,它不会更改 aactivity_main.xml 的任何内容。

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2019-12-26
    相关资源
    最近更新 更多