由于一些特殊原因,需要 WebView 的单例,目的主要是为了在应用使用中保留H5的登录信息,避免重复登录,而退出应用为了安全性考虑需要销毁登录信息,最简单的不需要与三方联调的办法就是不销毁 WebView,我们也不需要保存任何信息。
不销毁的做法很简单,就是将销毁的触发时机隔断,WebActivity 使用 SingleTask,销毁时使用 moveTaskToBack(true),在 onNewIntent 对每次请求的链接进行判断域名重复性,不同则重新加载页面。
主要问题在于加载新页面 B 后,点击后退会变成上一个页面 A,理论上只需要清除历史记录即可,但经过测试在 webView.loadUrl 前调用 webView.clearHistory 是无效的,需要将 clearHistory 保存起来,在 onPageFinished 页面加载完成后,进行 clearHistory 任务的执行。
private Stack<Runnable> stack = new Stack<>();
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
moveTaskToBack(true);
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
stack.push(() -> webView.clearHistory());
webView.loadUrl(mPageUrl);
}
class X5WebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (!stack.isEmpty()) {
stack.pop().run();
}
}
}主要代码如上,没用 kotlin 是因为都是老代码,至于还有其他什么问题,等经过更多测试后补充。
本站广告由 Google AdSense 提供
0条评论