当使用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);
}
});
}
答案 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
}