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

安卓缓存清除和计算

分类: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

1***@qq.com

mark
2023-12-14 08:42
l***@gmail.com

l***@gmail.com

mark
2023-02-02 19:30
依米001

依米001

回复 依米001 :
上面的逻辑有问题,会导致重复计算。根据对原代码的理解,下面这个应该可以。如有不对,敬请指正
```
getFolderSize(files) {
let size = 0
if (Object.prototype.toString.call(files) === '[object Array]') {
let len = files.length
for (let i = 0; i < len; i++) {
size = size + this.getFolderSize(files[i])
}
} else {
if (!files.isHidden()) {
size = size + files.length()
}
}
return size
}
2022-01-06 09:20
依米001

依米001

```
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;
}
```
这段代码应该有问题吧,算出来永远都是0;我改了一下,貌似可以了。
```
getFolderSize(files) {
var size = 0
let len = files.length
for (let i = 0; i < len; i++) {
if (!files[i].isHidden()) { // 文件没有隐藏就计算
size = size + files[i].length()
if (files[i].isDirectory()) { // 然后是下面还有文件,就继续递归去计算
size = size + this.getFolderSize(files[i])
}
}
}
return size
}
```
2022-01-05 17:18
老船长9999

老船长9999

mark
2021-03-25 08:58
1***@163.com

1***@163.com

mark
2020-10-22 11:12
SeeMyEyes

SeeMyEyes

IOS如何获取缓存文件路径
2019-08-20 11:30
4***@qq.com

4***@qq.com

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

s***@163.COM

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

1***@qq.com

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