由于一些特殊原因,需要 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 是因为都是老代码,至于还有其他什么问题,等经过更多测试后补充。
本站由以下主机服务商提供服务支持:
0条评论