Android WebView离线缓存 WebViewAssetLoader 的使用

前言 :

各位同学大家好,最近很长时间没有更新文章了。因为搬到新家去了 所以留给自己的时间非常的少,今天因为在项目开发上面遇到一些问题 所以就想记录分享出来。

问题原因

是这样的,项目组这边做了一个安卓WebView 嵌套H5链接的游戏壳包 。相信很多同学做过类似的需求
很多同学会说这个很简单 初始化webview控件 然后 设置webviewsetting 即可 最后调用 xWalkView.loadUrl(url); 方法即可 因为我们加载的一个H5游戏 在初始化加载进度条的时候有一个下载动作 非常的吃网速 所以我们想到用webview 离线缓存来加载一些本地的js和图片资源。

需要用到的三方库

 implementation "androidx.webkit:webkit:1.2.0"

|## 具体实现:
布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    >
    <WebView
        android:id="@+id/wv"
        android:la
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WebView线缓存是指将 WebView 加载的网页内容缓存到本地,在没有网络连接的情况下仍然可以访问已缓存的网页。离线缓存可以提高用户体验,减少用户等待时间,同时也可以减少网络流量消耗。 在 Android 中实现 WebView线缓存可以通过以下步骤: 1. 在 AndroidManifest.xml 文件中添加网络权限和写入外部存储器权限: ``` <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 2. 在 WebView 中启用缓存: ```java webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); ``` 3. 在 WebViewClient 中加载缓存: ```java webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); if (request.isForMainFrame()) { view.loadUrl("file:///android_asset/error.html"); } } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { super.onReceivedSslError(view, handler, error); handler.proceed(); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); webView.saveWebArchive(getCacheFilePath(url)); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); String filePath = getCacheFilePath(url); if (filePath != null) { try { InputStream inputStream = new FileInputStream(filePath); String mimeType = URLConnection.guessContentTypeFromName(filePath); return new WebResourceResponse(mimeType, "UTF-8", inputStream); } catch (FileNotFoundException e) { e.printStackTrace(); } } return super.shouldInterceptRequest(view, request); } }); ``` 4. 缓存网页内容: ```java private String getCacheFilePath(String url) { String fileName = URLEncoder.encode(url); String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/webview_cache/"; File dir = new File(path); if (!dir.exists()) { dir.mkdir(); } File file = new File(dir, fileName); if (file.exists()) { return file.getAbsolutePath(); } return null; } ``` 在加载网页时,先判断是否有缓存,如果有则加载缓存,否则从网络加载。在加载完成后,将网页内容保存到本地。在下次加载相同网页时,先从本地读取缓存,如果有更新则从网络加载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xq9527--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值