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

安卓缓存清除和计算

分类: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 五毛记忆

要回复文章请先登录注册

天羽1713

天羽1713

为什么安卓下,计算值是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
4***@qq.com

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

师大酸梅杨 (作者)

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

1***@qq.com

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

1***@qq.com

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