【问题标题】:WebView must be loaded twice to load correctlyWebView 必须加载两次才能正确加载
【发布时间】:2016-08-12 03:41:03
【问题描述】:

第一次加载带有 WebView 的页面时,有时图像会丢失或显示不正确。如果我重新加载页面,WebView 总是能完美显示。我知道每个人都会首先认为我在 loadUrl 之后设置了 javascript,但事实并非如此。

在 onCreate 我有:

learnWebView = (WebView)findViewById(R.id.learnWebView);
learnWebView.setWebViewClient(new WebViewClient());
learnWebView.getSettings().setJavaScriptEnabled(true);

然后在 onCreate 之后调用的函数中我有:

learnWebView.loadUrl("myurl");

是的,我知道每次在 onCreate 之后都会调用带有 loadUrl 的函数。

【问题讨论】:

  • 这是特定于 URL 还是特定于 Android 版本或特定设备?可能是 WebView 正在尝试加载缓存的内容并失败或其他原因。这有时会发生在桌面 WebKit 浏览器上。您是否尝试在首次加载时使用新缓存?
  • 实际上它似乎是特定于Android 4.0的。不会发生在 2.3 或 4.1 上。使用新缓存是指调用 learnWebView.clearCache(true)?
  • 调用 clearCache() 实际上使情况变得更糟。它使重新加载无法解决问题。
  • 另外,您可能想尝试使用 learnWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null) 禁用 WebView 的硬件加速,看看它是否是加速 WebView 中的错误。这是假设您在 Activity 上开启了硬件加速。
  • 好的,我只是想排除 4.0+ 硬件加速问题。我没有任何更具体的帮助给你,但你现在知道,如果你的缓存是空的,页面永远不会正确加载。同样,我会考虑尝试不同的网页,看看这是否特定于特定站点或从那里调试的内容。祝你好运。

标签: android webview


【解决方案1】:

请尝试这个而不是你的方式,这是一种不好的做法:

        learnWebView.post(new Runnable() {

            @Override
            public void run() {
                learnWebView.loadUrl("myurl");
            }
        });

或者这个,以防第一个不起作用:

        learnWebView.postDelayed(new Runnable() {

            @Override
            public void run() {
                learnWebView.loadUrl("myurl");
            }
        }, 500);

希望这会有所帮助。

【讨论】:

  • 与您的建议相比,我实施的 hack 存在哪些缺陷?我的意思是从实际的角度来看,我的方式可能会出错而这种方式不会出错?明天我验证此操作是否正确时,我会确保接受。
  • 您知道,按照您的方式,您让主线程从字面上休眠 1 秒并再次重新加载(两次),这种方式只是让 webview 立即执行作业(post() 方法)或在最坏的情况下,只需延迟几毫秒(postDelayed() 方法)(仅一次)。如果您需要解释。干杯!
【解决方案2】:

看看onViewAttachedToWindow。 只有在 onViewAttachedToWindow 被触发后,您才应该在 javascript 中处理您的逻辑。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。不确定它是否与您的情况相同。我花了超过 3 天的时间,实际上发现了另一个 WebView 对象调用 pauseTimers() 以节省一些 CPU 性能的原因,这实际上是“暂停所有 WebView 的所有布局、解析和 JavaScript 计时器。”

    【讨论】:

    • 您能提出解决办法吗?
    猜你喜欢
    • 2013-07-04
    • 2021-01-29
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    相关资源
    最近更新 更多