师大酸梅杨
师大酸梅杨
  • 发布:2017-03-01 15:59
  • 更新:2019-02-16 23:27
  • 阅读:7248

安卓缓存清除和计算

分类: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();  
                    }  
                          }  

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

7 关注 分享
lhyh 胡思 wen如故i 菜鸡 lyyan521@126.com zg9171@qq.com 1182804933@qq.com

要回复文章请先登录注册

441079891@qq.com

441079891@qq.com

wap2app能用吗
2019-02-16 23:27
sqw00453579@163.COM

sqw00453579@163.COM

mark
2019-01-18 12:56
1245699167@qq.com

1245699167@qq.com

回复 师大酸梅杨:
安卓高版本是可以用的,ios也可以计算出缓存,其中ios删除的不是很彻底,删了还有2M,就是计算是同步的还是怎的,就是js阻塞,页面要等一会儿才能点击
2018-08-29 14:05
师大酸梅杨

师大酸梅杨 (作者)

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

1245699167@qq.com

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

940062996@qq.com

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

940062996@qq.com

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

3220750763

回复 混合app:
你好,请问下你的这个功能实现了吗?我获取的缓存还是为0.
2018-07-09 17:21
296386505@qq.com

296386505@qq.com

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

混合app

检测为0
2018-05-23 15:08
765199214@qq.com

765199214@qq.com

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

546485659@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
师大酸梅杨

师大酸梅杨 (作者)

回复 1713340358@qq.com:
现在cache文件貌似没有存储在cache目录下了。
2018-01-16 13:40
1713340358@qq.com

1713340358@qq.com

为什么安卓下,计算值是0
2018-01-09 13:58
蒲公英飞呀飞

蒲公英飞呀飞

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");
这里不太懂,需要修改吗?我用的是PHP语言。
求大神不吝赐教!!!
2018-01-05 16:42
小橙子敲代码

小橙子敲代码

谁搞出来了!为什么我计算还是0
2017-12-15 17:48
415807297@qq.com

415807297@qq.com

我计算的也是0
2017-10-24 16:57
菜鸡

菜鸡

马一下
2017-10-23 16:27
ace_cy

ace_cy

我的姿势不对吗?计算出来还是0
2017-09-30 10:03
lufei

lufei

能为小白把截图的列子发出来吗,万分感谢
2017-09-29 11:50
师大酸梅杨

师大酸梅杨 (作者)

回复 102161596@qq.com:
不好意思,代码没整理好;
是调用clearAllCache4Android() 的这个方法,
2017-07-04 15:36
102161596@qq.com

102161596@qq.com

老铁,这个clearAllCache()函数显示未定义。。。
2017-06-23 19:18
102161596@qq.com

102161596@qq.com

老铁 能不能把你这个例子发我。。。
2017-06-22 17:54
喵了个咪

喵了个咪

mark
2017-05-14 11:24
师大酸梅杨

师大酸梅杨 (作者)

回复 wen如故i:
你可以把清除的那部分缓存文件的路径输出到console,清除的是那部分的文件,ios系统建议使用plus.cache.clear方法清除。贴出来的代码是为解决plus.cache.clear 在安卓下计算不准的情况下写的,自身以前写过点是安卓原生,所以你可以看下原生是怎么清除的。
2017-04-20 14:32
wen如故i

wen如故i

怎么才算有缓存,mui 上的 cache,清除缓存, localstorage会清除。ios上用calculate方法的缓存好多,清除之后,还是有,并且也清不掉,好像是其他程序的缓存?不然 hb H5+上面的plus.cache.clear方法清除之后,缓存大小没什么改变。
2017-04-07 15:42