灵徒
灵徒
  • 发布:2018-06-07 20:46
  • 更新:2018-06-12 09:30
  • 阅读:1792

安卓APP缓存管理官方的api无效?求可用的方法

分类:wap2app

安卓APP缓存管理官方的api无效?
网上看了很久都没有找到可用的方法!求可用的方法

2018-06-07 20:46 负责人:无 分享
已邀请:
i***@163.com

i***@163.com

具体那个api?。好像没有吧。
我猜你是想统计本地文件缓存大小。
我自己的方法:

function tongJi() {  
    var dirs = [plus.io.PUBLIC_DOCUMENTS, plus.io.PUBLIC_DOWNLOADS];  
    for(var i in dirs) {  
        size = 0;  
        plus.io.requestFileSystem(dirs[i], function(fs) {  
            queryDir(fs.root, 0);  
        }, function(e) {  

        });  
    }  
}  

function queryDir(dir, deep) {  
    if(!dir.isDirectory) {  
        vm.cacheSize_mb = vm.cacheSize == 0 ? '0MB' : (vm.cacheSize / 1024 / 1024).toFixed(1) + 'MB';  
        return;  
    }  
    deep += 1;  
    if(deep > 4) {  
        vm.cacheSize_mb = vm.cacheSize == 0 ? '0MB' : (vm.cacheSize / 1024 / 1024).toFixed(1) + 'MB';  
        return;  
    }  
    var directoryReader = dir.createReader();  
    directoryReader.readEntries(function(entries) {  
        if(entries.length == 0) {  
            vm.cacheSize_mb = vm.cacheSize == 0 ? '0MB' : (vm.cacheSize / 1024 / 1024).toFixed(1) + 'MB';  
            return;  
        }  
        for(var i = 0; i < entries.length; i++) {  
            if(entries[i].isDirectory) {  
                queryDir(entries[i], deep);  
            } else {  
                entries[i].getMetadata(function(metadata) {  
                    vm.cacheSize += metadata.size;  
                    vm.cacheSize_mb = (vm.cacheSize / 1024 / 1024).toFixed(1) + 'MB';  
                }, function() {  

                });  
            }  
        }  
    });  
}
  • 灵徒 (作者)

    能给点注释么?实在没有看明白

    2018-06-12 01:11

i***@163.com

i***@163.com

清除本地文件缓存;

function clearCache() {  
    var dirs = [plus.io.PUBLIC_DOCUMENTS, plus.io.PUBLIC_DOWNLOADS];  
    var c = 0;  
    for(var i in dirs) {  
        size = 0;  
        plus.io.requestFileSystem(dirs[i], function(fs) {  
            fs.root.removeRecursively(function(entry) {  
                c += 1;  
                if(c == dirs.length) {  
                    mui.toast('已清除', {  
                        duration: '1000',  
                        type: 'div'  
                    });  
                    vm.cacheSize = 0;  
                    vm.cacheSize_mb = '';  
                    tongJi();  
                }  
            }, function(e) {  
                c += 1;  
                if(c == dirs.length) {  
                    mui.toast('已清除', {  
                        duration: '1000',  
                        type: 'div'  
                    });  
                    vm.cacheSize = 0;  
                    vm.cacheSize_mb = '';  
                    tongJi();  
                }  
            });  
        }, function(e) {  

        });  
    }  
}
i***@163.com

i***@163.com

<div v-text="cacheSize_mb"></div>
/*使用了vue*/  
var vm = new Vue({  
    el: '#app',  
    data: {  
        cacheSize: 0,  
        cacheSize_mb: ''  
    }  
});  
/*  
    PRIVATE_WWW: 应用运行资源目录常量  
    PRIVATE_DOC: 应用私有文档目录常量  
    PUBLIC_DOCUMENTS: 程序公用文档目录常量  
    PUBLIC_DOWNLOADS: 程序公用下载目录常量  
/*  
function tongJi() {  
       //统计针对两个 公用文件夹  
    var dirs = [plus.io.PUBLIC_DOCUMENTS, plus.io.PUBLIC_DOWNLOADS];  
        //plus.io.requestFileSystem( type, succesCB, errorCB );  
        //http://www.html5plus.org/doc/zh_cn/io.html#plus.io.requestFileSystem  
    for(var i in dirs) {//遍历入口文件夹  
        plus.io.requestFileSystem(dirs[i], function(fs) {  
            queryDir(fs.root, 0);  
        }, function(e) {  

        });  
    }  
}  
// 里面 vm.cacheSize_mb = vm.cacheSize == 0 ? '0MB' : (vm.cacheSize / 1024 / 1024).toFixed(1) + 'MB';是计算大小和单位转换的(vm.cacheSize_mb是要在html里面写才会看到效果,参见vue文档),可以换其他实现  
function queryDir(dir, deep) {  
    if(!dir.isDirectory) {//如果dir不是文件夹,返回  
        vm.cacheSize_mb = vm.cacheSize == 0 ? '0MB' : (vm.cacheSize / 1024 / 1024).toFixed(1) + 'MB';  
        return;  
    }  
    deep += 1;  
    if(deep > 4) {//如果文件夹深度大于4层,返回  
        vm.cacheSize_mb = vm.cacheSize == 0 ? '0MB' : (vm.cacheSize / 1024 / 1024).toFixed(1) + 'MB';  
        return;  
    }  
    var directoryReader = dir.createReader();//目录读取器  
//http://www.html5plus.org/doc/zh_cn/io.html#plus.io.DirectoryReader  
    directoryReader.readEntries(function(entries) {//读取目录信息  
        if(entries.length == 0) {//如果是空目录,返回  
            vm.cacheSize_mb = vm.cacheSize == 0 ? '0MB' : (vm.cacheSize / 1024 / 1024).toFixed(1) + 'MB';  
            return;  
        }  
        for(var i = 0; i < entries.length; i++) {//不是空目录,目录里面的东西  
            if(entries[i].isDirectory) {//下级某个东西是目录,递归调用本方法:queryDir  
                queryDir(entries[i], deep);  
            } else {下级某个东西是文件,  
                                //http://www.html5plus.org/doc/zh_cn/io.html#plus.io.FileEntry  
                entries[i].getMetadata(function(metadata) {//获取文件信息  
                    vm.cacheSize += metadata.size;//累计加上它的大小  
                    vm.cacheSize_mb = (vm.cacheSize / 1024 / 1024).toFixed(1) + 'MB';  
                }, function() {  

                });  
            }  
        }  
    });  
}
  • 灵徒 (作者)

    谢谢,我试试看,不过上面的代码结果是:code->10,message->执行错误!

    2018-06-12 09:36

  • 灵徒 (作者)

    vm可以看作js对象,我没用vue把vm定义成一个对象,统计出来都是0!

    2018-06-12 10:09

该问题目前已经被锁定, 无法添加新回复