安卓APP缓存管理官方的api无效?
网上看了很久都没有找到可用的方法!求可用的方法
灵徒
- 发布:2018-06-07 20:46
- 更新:2018-06-12 09:30
- 阅读:1982
具体那个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() {
});
}
}
});
}
清除本地文件缓存;
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) {
});
}
}
<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() {
});
}
}
});
}
灵徒 (作者)
能给点注释么?实在没有看明白
2018-06-12 01:11