在Android网络视图上调试慢速点击响应?

在Android网络视图上调试慢速点击响应?,android,android-webview,Android,Android Webview,我已经在我的Android应用程序(per)中实现了一个WebView。我使用自定义WebViewClient和override shouldOverrideUrlLoading来显示在新活动中单击的链接,几乎与文档所示完全相同 我遇到的问题是,我的应用程序接收到指示已单击链接的消息所需的时间(例如,调用shouldOverrideUrlLoading)。通常,它发生在1-2秒内(勉强可以接受),但有时需要10++秒(!!根本不可接受)。请注意,我已经阅读并理解了300毫秒的固有滞后,但我的滞后

我已经在我的Android应用程序(per)中实现了一个WebView。我使用自定义WebViewClient和override shouldOverrideUrlLoading来显示在新活动中单击的链接,几乎与文档所示完全相同

我遇到的问题是,我的应用程序接收到指示已单击链接的消息所需的时间(例如,调用shouldOverrideUrlLoading)。通常,它发生在1-2秒内(勉强可以接受),但有时需要10++秒(!!根本不可接受)。请注意,我已经阅读并理解了300毫秒的固有滞后,但我的滞后时间更糟糕。还请注意,渲染/滚动速度不是问题(事实上,我可以以惊人的速度向下滚动WebView)

我最好的猜测是页面上的Javascript造成了延迟,尽管我不知道如何调试它,甚至不知道如何证实我的怀疑!我已经在Javascript中插入了许多console.log()语句,但没有看到太多发生的情况,因此如果这是问题所在,很难缩小范围

我还尝试禁用缓存


下面是我用于实例化WebView的代码。请注意,WebView是我的Android应用程序中唯一的视图。我的清单中还启用了硬件加速

// 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应用程序,它在那里工作得很好。没有任何滞后;链接实时单击打开。

如果您还没有尝试过,请查看是否可以使用来比较应用程序和Android浏览器之间的traceview输出,分析单击链接到打开下一页之间的时间。结果可能不会直接指向问题,但可能会给您一些提示


关于如何在Eclipse中的选定进程上使用该工具。

如果您使用的是脊椎/主干,而不是单击“事件更改”,则触摸“开始”,这将更快

'单击#调试':'函数名称'

换成

“touchstart#debug”:函数名


也许对你有帮助

在您的Android清单文件中,将以下属性添加到

中。您在未以调试模式运行时是否尝试过此操作
WebView
在调试时非常慢,但如果只是运行而不是调试,速度会快得多。有趣的是,没有调试器,它似乎可以改善“最小”延迟,但“最大”延迟不变。您如何测量/计算响应时间?shouldOverrideAllowing函数中的I Log.v()输出,在第一行,以及WebView的onTouch方法中(我使用setOnTouchListener绑定了该方法)。因此,我使用的是Android操作系统捕捉到的触摸和WebView处理程序响应的触摸之间的时间。您是否考虑过使用Javascript桥而不是依赖shouldOverrideUrlLoading函数?我在OP中声明我已经启用了硬件加速。在OP中,我说我读过关于这个主题的链接帖子(这没有帮助——谷歌有一整篇关于这个的文章)。此外,这里我甚至没有谈论Javascript函数。只需直接点击标签,不涉及javascript。
<application android:hardwareAccelerated="true">