加载新URL时Webview卡住了

时间:2017-11-17 04:16:54

标签: android android-webview nfc

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

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

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);
        }
    });
}

1 个答案:

答案 0 :(得分:1)

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

    @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
}