加载新内容时 Webview 卡住 URL

Webview is stuck when loading new URL

当使用 loadUrl() 加载新 URL 时,标题发生变化,似乎正在加载新网页,但视图卡住了,我可以看到滚动条如何移动以及缩放控制器如何工作,但是视图只是冻结。 只有当从 NFC 标签 加载新的 url 时才会发生这种情况,这是一种非常奇怪的行为,除了 webview 工作正常之外。我必须在 MainActivity 中使用新 URL 向 WebViewActivity 发送广播,但之后视图卡住了,我尝试调用 UIThread 中的方法,但没有成功。

这里是 webView 的设置,webclient 和 chrome client 在最后一段代码中声明。

public void setupWebView() {
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setDisplayZoomControls(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    webView.setWebViewClient(webViewClient);
    webView.setWebChromeClient(webChromeClient);
}

下面是我如何调用方法 loadUrl(),broadCastReceiver 负责处理 NFC 意图。

    private WebViewClient webViewClient = new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        webView.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        progressContainer.setVisibility(View.GONE);
    }
};

private WebChromeClient webChromeClient = new WebChromeClient() {
    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
        titleView.setText(view.getTitle());
    }
};

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        loadNewUrl(intent);
    }
};

    public void loadNewUrl(Intent i) {
    String fullUrl = i.getExtras().getString(Constants.WEB_URL, "");

    progressContainer.setVisibility(View.VISIBLE);
    webView.post(new Runnable() {
        @Override
        public void run() {
            webView.loadUrl(fullUrl);
        }
    });
}

问题是我重写了 onPause 方法,每次检测到 NFC 时它都会调用此方法,导致 UI 完全暂停,我也在调用 webview onPause。在我的 MainActivity 中,我有多个触发器,如地理定位、推送通知,它们工作正常,除了 NFC 触发器。 因此,当在 Activity 上检测到 NFC 时,它会在所有其他活动上调用 onPause。

    @Override
protected void onPause() {
    super.onPause();
    webView.onPause();
}

同样在 MainActivity 我正在使用 OnNewIntent() 方法来捕获任何意图

    @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
         //Handles nfc and sends broadcast
    } else if (Constants.INTENT_PUSH_NOITIFICATION.equals(intent.getAction())) {
         //Handles notification and sends broadcast
}