前言
现在许多app都嵌入了H5页面,H5具有开发周期短、灵活性好的特点。但是WebView的性能问题却一直影响着用户体验。特别突出的就是加载速度慢和消耗流量。
在项目中,我做了一个测试,加载一个默认结果页所需时间(测试手机一加8)
在强网情况下,不考虑加载url所需的164ms情况下,Webview初始化及在loadUrl情况下初始化配置文件耗时448ms+365ms=813ms,即当我们第一次打开WebView时将近1s的时间在做初始化操作,这段时长足以让用户感知。
由于webview初始化时间过长,我们决定使用预加载的形式在应用打开时提前创建webview,以提高应用H5页面打开速度。
WebView预加载策略
1、首先我们需要创建一个webview,并将其改为静态全局调用,并以单例形式将其加入控制类
public class SearchResultCacheWebView {
private static volatile SearchResultCacheWebView sSearchResultCacheWebView = null;
public static final String MIDDLE_URL = ConstantUrl.SEARCH_NEWS_URL;
private static final CommonWebView mCachedWebView = new CommonWebView(new MutableContextWrapper(BaseApplication.getContext()));
private SearchResultCacheWebView() {
}
public static SearchResultCacheWebView getInstance() {
if (sSearchResultCacheWebView == null) {
synchronized (SearchResultCacheWebView.class) {
if (sSearchResultCacheWebView == null) {
sSearchResultCacheWebView = new SearchResultCacheWebView();
mCachedWebView.setSetting(APPCommonUtil.getAgent());
mCachedWebView.loadUrl(MIDDLE_URL);
}
}
}
return sSearchResultCacheWebView;
}
public CommonWebView getWebView(Context context) {
// webView不为空,则开始使用预创建的WebView,并且替换Context
MutableContextWrapper contextWrapper =