关于H5应用乱用localStorage引发的血案

文章讲述了使用H5开发的webAPP在Android设备上因localStorage存储过多导致应用崩溃的问题。作者发现并解决了这个问题,通过在webview中添加清理localStorage的方法或使用CookieManager清理缓存。提供了防止未来出现类似问题的解决方案。
摘要由CSDN通过智能技术生成

      本次记录一个关于用H5开发的webAPP 在Android客户端使用webview加载的问题,由于webapp使用localStorage存储了大量的表单信息,导致使用频繁的用户在该目录下存储的数据越来越多直到上限,localStorage的容量上限是5M,达到上限后H5程序就崩溃了,显示白屏,这问题又不容易复现,大多数用户达不到上限,使用是没问题的,出问题的手机又不在身边,经过一天的排查,查看前端代码和Android代码,最后终于锁定了是localStorage使用不当导致的。

       为了以后不再被坑,在我们项目的封装的webview的类里边加了清理localStorage缓存数据的方法 WebStorage.getInstance().deleteAllData();这个方法可以加在打开网页之前,也可以加在网页关闭的时候。当然清理数据的方式有很多,也可以使用如下方式:

CookieSyncManager.createInstance(getApplicationContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
cookieManager.removeAllCookie();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    cookieManager.removeSessionCookies(null);
    cookieManager.removeAllCookie();
    cookieManager.flush();
} else {
    cookieManager.removeAllCookie();
    CookieSyncManager.getInstance().sync();
}
deleteFile(new File(getCacheDir().getParentFile().getAbsolutePath(),"app_webview"));
public void deleteFile(File file) {








        if (file.exists()) {
            if (file.isFile()) {
                file.delete();
            } else if (file.isDirectory()) {
                File files[] = file.listFiles();
                for (File value : files) {
                    deleteFile(value);
                }
            }
//            Timber.d("deleteFile   delete file path=" + file.getAbsolutePath()+","+file.delete());
            new SecurityManager().checkDelete(file.getAbsolutePath());
            Timber.d("deleteFile   delete file path=" + file.getAbsolutePath());
        } else {
            Timber.d("deleteFile   delete file no exists " + file.getAbsolutePath());
        }
    }

文章里有不合理的地方欢迎批评指正,欢迎评论区留言交流。

关注我获取更多知识或者投稿

749ab8a1a7c0521503d46a70b60a7eda.jpeg

5b4de7d6bd8616b230f13b46d2703ddb.jpeg

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
localStorage是HTML5提供的一种用于在客户端存储数据的API。它可以在浏览器中存储键值对,并且这些数据会一直保存在用户的本地存储中,即使用户关闭了浏览器也不会丢失。localStorage应用非常广泛,可以用于以下几个方面: 1. 持久化用户数据:可以使用localStorage来存储用户的个人设置、偏好、登录状态等信息,以便在用户下次访问网站时能够还原用户的个性化设置。 2. 缓存数据:可以将一些常用的数据存储在localStorage中,以减少对服务器的请求,提高网页加载速度和用户体验。 3. 离线应用localStorage可以用于开发离线应用,将应用所需的资源文件存储在本地,使得应用在没有网络连接的情况下仍然可以正常运行。 4. 跨页面通信:可以使用localStorage来实现不同页面之间的数据传递和通信,比如在一个页面中修改localStorage中的某个值,然后在另一个页面中读取这个值。 需要注意的是,localStorage只能存储字符串类型的数据,如果需要存储其他类型的数据,需要先将其转换为字符串再存储,取出时再进行相应的转换操作。此外,localStorage的存储容量是有限的,不同浏览器的限制也不同,一般在5MB到10MB之间。因此,在使用localStorage时需要注意数据的大小和存储空间的限制。 #### 引用[.reference_title] - *1* [localStorage的理解和应用](https://blog.csdn.net/chenyejunjun/article/details/53818638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值