3

Android アプリケーションに WebView を実装しました (ドキュメントに従って)。ドキュメントが示すように、カスタム WebViewClient を使用し、shouldOverrideUrlLoading をオーバーライドして、新しいアクティビティでクリックされたリンクを表示します。

私が抱えている問題は、リンクがクリックされたことを示すメッセージをアプリケーションが受信するのに時間がかかることです (たとえば、shouldOverrideUrlLoading が呼び出されます)。一般に、それは 1 ~ 2 秒で発生します (ほとんど許容できません) が、場合によっては 10++ 秒かかります (!! まったく許容できません)。Android WebView のタッチ応答性に関するこのスレッドを読んで、固有の 300 ミリ秒の遅延があることを理解しましたが、私の遅延時間ははるかに悪いことに注意してください。また、レンダリング/スクロール速度は問題ではないことに注意してください (実際、WebView を驚くほど速くスクロールできます)。

私の最善の推測では、遅延はページ上の Javascript から来ているということですが、これをデバッグする方法や、私の疑いを確認する方法についても途方に暮れています! 多くの console.log() ステートメントを Javascript に挿入しましたが、あまり起こっていないので、これが問題である場合でも絞り込むのは非常に困難です。

このスレッドに従って、キャッシュを無効にすることも試みました。


WebView をインスタンス化するための私のコードは以下のとおりです。私の Android アプリの唯一のビューの WebView に注意してください。また、マニフェストでハードウェア アクセラレーションをオンにしています。

// the _web_view is inflated, etc...

            _web_view.getSettings().setSupportZoom(false);
            _web_view.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
            _web_view.setWebChromeClient(new CustomWebChromeClient());
            _web_view.getSettings().setJavaScriptEnabled(true);
            _web_view.getSettings().setDomStorageEnabled(true);
            _web_view.setWebViewClient(new CustomWebViewClient());
            _web_view.loadUrl(url);

FWIW、カスタム chrome クライアントは次のとおりです。

public class CustomWebChromeClient extends WebChromeClient {

      public boolean onConsoleMessage(ConsoleMessage cm) {
        Log.d("Javascript", cm.message() + " -- From line "
                             + cm.lineNumber() + " of "
                             + cm.sourceId() );
        return true;
      }
}

そして、カスタム Web ビュー クライアント...

public class CustomWebViewClient extends WebViewClient {


@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    Intent intent = new Intent(view.getContext(), WebPopupActivity.class) ;
    intent.putExtra("url", url);
    MyApp.Singleton.startActivity(intent);
    return true;
}
}

編集: 標準の Android 組み込みブラウザーで Web アプリをテストしたことにも注意してください。ラグは一切ありません。リンクをクリックするとリアルタイムで開きます。

4

3 に答える 3

1

まだ試していない場合は、ADT Eclipse プラグイン サポートを使用して、アプリと Android ブラウザーの traceview 出力を比較し、リンクをクリックしてから次のページが開くまでの時間をプロファイリングできるかどうかを確認してください。結果は問題を直接指摘するものではないかもしれませんが、おそらくいくつかのヒントが得られるでしょう。

この回答には、 Eclipse で選択したプロセスでツールを使用する方法に関する簡単な説明があります。

于 2012-09-16T00:14:17.337 に答える
0

Android マニフェスト ファイルで、<application>タグに次の属性を追加して、アプリケーションのハードウェア アクセラレーションを有効にします。

<application android:hardwareAccelerated="true">

詳細については...以下のリンクを参照してください...

http://developer.android.com/guide/topics/graphics/hardware-accel.html

于 2012-09-18T14:20:10.887 に答える
0

Click イベントの代わりに Spine/BackBone を使用している場合は、より高速な touch start に変更します。

'#Debug をクリック': 'Function_name'

それを

'touchstart #debug': 関数名

あなたを助けるかもしれません。

于 2012-09-18T07:17:41.230 に答える