师大酸梅杨
师大酸梅杨
  • 发布:2017-03-01 15:59
  • 更新:2023-12-14 08:42
  • 阅读:18245

安卓缓存清除和计算

分类:HTML5+

官方提供的方法中,计算缓存和清除缓存 貌似对安卓系统没有效果,以下是采用原生安卓提供的方法,供有需要的同学参考,自己只有一台魅族手机,不知在其他机型上是否通用。
以下是代码:

var Intent = null,  
            File = null,  
            Uri = null,  
            main = null;  
        var cacheCaleState=false;  
var os=null;  
mui.plusReady(function() {  
     os=plus.os.name;  
            if(os == "Android") {  
                main = plus.android.runtimeMainActivity();  
                Intent = plus.android.importClass("android.content.Intent");  
                File = plus.android.importClass("java.io.File");  
                Uri = plus.android.importClass("android.net.Uri");  
            }  
         initCacheSize();  

      cacheDom.addEventListener('tap', function() {  
                plus.nativeUI.confirm("确定清除缓存? 清除后App中的数据将会被清理,用户需重新登录", function(e) {  
                    if(e.index == 0) {  
                        console.log("cacheCaleState:"+cacheCaleState);  
                        if(os=="Android"){  
                            if(cacheCaleState==true){  
                            clearAllCache();      
                        }else{  
                            mui.toast("缓存计算中……");  
                        }  
                        }else if(os=="iOS"){  
                            clearCache(function(){  
                                //再次计算缓存大小  
                                initCacheSize();  
                            });  
                        }  
                    }  
                }, "新消息通知", ["确定", "取消"]);  
            }, false);  

});

以下是方法体 计算缓存大小

function initCacheSize (){  
            var formatedSize;  
            if(os=="Android"){  
                formatedSize=formatSize(calcCache4Android());  
                cacheCaleState=true;  
                cacheDomChild.innerHTML="清除缓存<span class='mui-badge '>" + formatedSize + "</span>";  
            }else if(os=="iOS"){  
                calcCache(function(size) {  
                    cacheCaleState=true;   
                formatedSize=formatSize(size);  
                cacheDomChild.innerHTML="清除缓存<span class='mui-badge '>" + formatedSize + "</span>";  
            });  
            }else{  
                mui.toast("未知的设备类型,无法计算缓存");  
                cacheCaleState=false;  
            }  
        }  
              /**  
         * 计算缓存大小  官方提供方法,用于iOS  
         */  
        function calcCache(callback) {  
            console.log("开始计算缓存大小");  
            var finalSize = -1;  
            plus.cache.calculate(function(size) {  
                console.log(size + "byte");  
                var sizeInt = parseInt(size);  
                console.log("sizeInt" + sizeInt);  
                return callback(finalSize);  
            });  

        }  

        function calcCache4Android() {  
            var cacheSize=0;  
            console.log("start calc android");  
                var sdRoot = main.getCacheDir();  
                var files = plus.android.invoke(sdRoot,"listFiles");  
                 cacheSize += getFolderSize(files);   
            console.log("android size-->"+cacheSize);  
            return cacheSize;  
        }  

            function getFolderSize(files) {  
                var size = 0;  
                    var len = files.length;  
                    for(var i = 0; i < len; i++) {  
                        // 如果下面还有文件  
                        if(files[i].isDirectory()) {  
                            size = size + getFolderSize(files[i]);  
                        } else if(!files[i].isHidden()){  
                            size = size + files[i].length();  
                        }  
                    }  
                return size;  
        }  

                function formatSize(size){  
            var fileSizeString;  
            size=parseInt(size);  
            console.log("我是size"+size);  
                if(size == 0){  
                    fileSizeString = "0B";  
                }else if(size < 1024){  
                    fileSizeString = size + "B";  
                }else if(size < 1048576){  
                    fileSizeString = (size/1024).toFixed(2) + "KB";  
                }else if (size < 1073741824){  
                    console.log("Mb"+size);  
                    fileSizeString = (size/1048576).toFixed(2) + "MB";  
                    console.log("/ after"+fileSizeString);  
                }else{  
                    fileSizeString = (size/1073741824).toFixed(2) + "GB";  
                }  
                return fileSizeString;  
        }  

以下是删除缓存的方法

 /**  
         * 清除缓存    
         */  
        function clearCache(callback) {  
            plus.storage.clear();  
            plus.cache.clear(function() {  
                console.log("清除了~~~return");  
                return callback();  
            });  
        }  
function clearAllCache4Android(){  
            console.log("清理所有缓存");  
             console.log("main"+main.getCacheDir());  
                var sdRoot = main.getCacheDir();  
                var files = plus.android.invoke(sdRoot,"listFiles");  
                    deleteDir(files);     
                //再次计算缓存大小  
               initCacheSize();  
        }  

        function deleteDir(files){  
                    var len = files.length;  
                    console.log("len:"+len);  
                    for(var i = 0; i < len; i++) {  
                        console.log("delete file dir:"+files[i]);  
                        files[i].delete();  
                    }  
                          }  

方法名比较直观,就没有一一注释了。

9 关注 分享
lhyh 胡思 wen如故i 菜鸡 l***@126.com z***@qq.com 稳定点行不行 8***@qq.com 五毛记忆

要回复文章请先登录注册

师大酸梅杨

师大酸梅杨 (作者)

回复 1***@qq.com :
你是安卓还是iOS,安卓的高版本好像获取不到了。早之前写的代码,都没在用了
2018-08-29 13:44
1***@qq.com

1***@qq.com

问一个问题,这样计算,缓存比较大时,耗时时间长,js单线程会影响页面点击。然后使用Web Worke,又不能使用plus,就算我把plus传进去了也没啥用,请问有什么好的办法么
2018-08-29 11:57
9***@qq.com

9***@qq.com

回复 3220750763 :
同问
2018-08-07 15:24
9***@qq.com

9***@qq.com

length()和delete()未定义
2018-08-07 15:23
3220750763

3220750763

回复 过时的流行 :
你好,请问下你的这个功能实现了吗?我获取的缓存还是为0.
2018-07-09 17:21
2***@qq.com

2***@qq.com

我用plus.cache.clear()直接把应用的session清理掉了,请问有没有人遇到,怎么处理?
2018-05-25 11:03
过时的流行

过时的流行

检测为0
2018-05-23 15:08
专注写bug

专注写bug

老铁有安卓现在可以计算并清理缓存的代码么,这个方法我计算为0,查看手机cache文件夹没有文件,我导入文件进去重新计算还是0
2018-03-08 17:29
5***@qq.com

5***@qq.com

var finalSize = -1;
plus.cache.calculate(function(size) {
console.log(size + "byte");
var sizeInt = parseInt(size);
console.log("sizeInt" + sizeInt);
return callback(finalSize);
});
这里是什么意思?为什么定义一个-1再返回一个-1当做缓存数
2018-01-23 10:33
师大酸梅杨

师大酸梅杨 (作者)

回复 天羽1713 :
现在cache文件貌似没有存储在cache目录下了。
2018-01-16 13:40