6

最近、自分のアプリで時折 LAG が発生することに気付きました。LAGとは、Wifiまたはモバイルデータを使用するかどうかによって、最大40秒かかる可能性があることを意味します...

ページの 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 を使用して新しいアクティビティを作成しているためでしょうか?

何かご意見は?

4

1 に答える 1

5

この厄介な問題の解決策をスケッチすることができました...何を試しても、この問題に対する Java の解決策を見つけることができませんでしたが、HTML + JavaScript の解決策を見つけました。

Java の onPageFinish を待つ代わりに、java スクリプトを挿入して window.onLoad イベントをリッスンします...

そこに実際の JavaScript を挿入します...魅力的に機能します...

詳細については。

于 2013-08-19T13:37:09.473 に答える