前言
app中加载页面会面临加载过程中页面显示空白的问题,因此为了避免这种情况的发生,一般都会显示一个加载框来告知用户,接下来就是如何确保百分百加载完成的情况了。
实践
我先把代码贴出来:
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress == 100) {
// TODO 加载完成
}
}
});
可以看到的是重写了WebChromeClient中的onProgressChanged,一般来说这样的确可以获取加载完成的结果,但当我实际运用起来的时候,重定向的这些操作也会被调用,这样多次的调用导致我们无法得知有没有真正的加载完成,因此在这个基础之上我改进了以下,代码如下:
// 定时器
final private ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
private ScheduledFuture<?> schedule = null;
// 上面的代码是成员变量,我放在这里方便看
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
if (newProgress == 100) {
if (ObjectUtil.isNotNull(schedule)) {
// 清除上一个任务
schedule.cancel(true);
schedule = null;
}
// 新增任务
schedule = service.schedule(() -> {
// TODO 加载完成
}, 1, TimeUnit.SECONDS);
}
}
});
我在原先的基础上加了一个定时器,这样就能保证执行的是最后一次加载完成的结果
参考文章:
👍点赞,你的认可是我创作的动力 !
🌟收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!