【问题标题】:Log <GATE-M>DEV_ACTION_COMPLETED</GATE-M> seems to delay execution on Android日志 <GATE-M>DEV_ACTION_COMPLETED</GATE-M> 似乎会延迟 Android 上的执行
【发布时间】:2013-08-02 11:24:37
【问题描述】:

我最近注意到我的应用偶尔会出现 LAG。 LAG 我的意思是它最多可能需要 40 秒,这取决于我使用的是 Wifi 还是移动数据...

我加载一个页面url,然后加载js执行:

    webView = (WebView) view.findViewById(R.id.WebView);

    webView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            logDebug("Loading URL: " + url);
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return WrappingClass.this.shouldOverrideUrlLoading(view, url);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        logInfo("loading JavaScript to webview.");
        webView.loadUrl("full-js-here");

        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            logError("error code:" + errorCode);
            super.onReceivedError(view, errorCode, description, failingUrl);
        }
    });

    WebSettings webSettings = webView.getSettings();
    webSettings.setSavePassword(false);
    webSettings.setSaveFormData(false);
    webSettings.setJavaScriptEnabled(true);
    webView.requestFocus(View.FOCUS_DOWN);
    webView.loadUrl("url");

调用加载url后,页面显示在web视图中,UI是响应式的,我可以点击按钮,返回,导航应用...

但是

我试图运行的脚本没有被执行,直到 DEV_ACTION_COMPLETED 被打印到日志中,然后一切恢复正常,并且 onPageFinished 被调用并立即运行脚本。问题是这可能需要 40 秒。

== 更新 ==

似乎延迟增长到某个点,然后延迟缩短到零并再次增长......它就像一个序列:0,1,2,4,8,16,32......然后从 0 开始。

可能是因为我在太短的时间内使用 webview 创建新活动?

有什么想法吗?

【问题讨论】:

  • 尝试在webSettings.setJavaScriptEnabled(true); 之前添加webView.setWebChromeClient(new WebChromeClient()); webView.setWebViewClient(new WebViewClient());。也看看这个:stackoverflow.com/questions/5820237/…
  • 几个小时后会试一试...

标签: android android-webview android-browser webviewclient android-websettings


【解决方案1】:

我们已经设法为这个糟糕的问题制定了一个解决方案......无论我尝试了什么,我都找不到这个问题的 Java 解决方案,但我们确实找到了一个 HTML + JavaScript 解决方案:

我们不等待java的onPageFinish,而是注入一个java脚本来监听window.onLoad事件...

然后我们注入我们真正的 JavaScript...就像一个魅力...

For more details.

【讨论】:

  • 您的解决方案运行良好,我为您的解决方案 +1。但如果我能找出问题的根本原因,我会是一个更快乐的露营者,因为它发生在选择 url 上。例如,如果 url 为 google.com,onPageFinished 总是会立即触发。使用另一个 url,例如linkedIn 的 auth url,onPageFinished 在通过设置清除应用程序缓存后第一次加载时不会触发。并且通过覆盖 webviewclient 和 web chromeclient 的方法观察,该页面上没有发生重定向或错误。
  • 我认为它与内容加载有关...如果您要构建一个简单的 webview 应用程序并打印出所有回调,您会注意到,这也是 shouldOverride...url() 方法每次加载都不会调用,这取决于请求是get还是post,取决于这些是否是AJAX调用,我发现有很多原因,而且ChromeClient报告与WebViewClient相同。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多