App 页面里图片展示过多,加载速度缓慢,需要优化 H5 容器的加载速度,争取实现 H5 页面秒开。通过拦截替换 H5 容器中加载的资源文件,替换成下载好的本地文件,无需网上加载,即可大大提升 H5 页面的打开效率。以下方法实现为 Demo 代码,仅供参考。
继承 H5 容器提供的
H5ResProvider
类,并重写contains
和getResource
方法。//return true 拦截(取本地资源),false 不拦截(网络加载) @Override public boolean contains(String sourceUrl) { if (isCache(sourceUrl)) { if (ResourceCache.contains(sourceUrl)) { LoggerFactory.getTraceLogger().debug(TAG, "contains: " + sourceUrl); //不拦截 return true; } else { ResourceCache.download(sourceUrl); return false; } } return false; }
@Override public InputStream getResource(String sourceUrl) { //从本地缓存中获取资源 if (isCache(sourceUrl)) { if (ResourceCache.contains(sourceUrl)) { try { InputStream inputStream = ResourceCache.getResource(sourceUrl); if (null == inputStream) { LoggerFactory.getTraceLogger().debug(TAG, "File null: " + sourceUrl); return new URL(sourceUrl).openStream(); } LoggerFactory.getTraceLogger().debug(TAG, "getResource: " + sourceUrl); return inputStream; } catch (Exception e) { } } } else { //从网络链接获资源 try { return new URL(sourceUrl).openStream(); } catch (IOException e) { e.printStackTrace(); } } return null; }
注册
H5ResProvider
。public static void register() { H5Utils.setProvider(H5ResProvider.class.getName(), new GapResProvider()); }
通过自定义 H5ResProvider
,用户可以决定是否拦截加载的资源和资源获取方式(本地读取、网络链接读取),用户可自定义实现自己的业务场景。
文档内容是否对您有帮助?