app清理缓存,此方法适用于mui框架开发app人员参考,使用的是插件开发

标签: mui插件开发 缓存计算和清理
37人阅读 评论(0) 收藏 举报
分类:

app清理缓存,此方法适用于mui框架开发app人员参考,使用的是插件开发,之前采取mui框架自带的清理缓存方式,计算到的缓存大小永远都是0,今天测试发现不行,毕竟在android系统设置中有缓存的显示。

废话不多说,直接说规则。

看我的代码的需要大家会使用插件混合开发,对插件开发不熟悉的可以看我之前的博客!

首先时插件js文件

document.addEventListener("plusready",function(){
// 声明的JS“扩展插件别名”
    var _BARCODE = 'clearCache',
        B = window.plus.bridge;
var clearCache = {
//添加操作方法、传入参数、返回类型
clearPhoneCache:function(Argus,successCallback,errorCallback){
        var success = typeof successCallback !== 'function' ? null : function(args) 
            {
            successCallback(args);
            },
            fail = typeof errorCallback !== 'function' ? null : function(code) 
            {
            errorCallback(code);
            };
            callbackID = B.callbackId(success, fail);
            return B.exec(_BARCODE, "clearPhoneCache", [callbackID, Argus]);
            }
};
window.plus.clearCache = clearCache;

},true);

这个文件很关键,他是html格式的webview和java android插件的桥梁,当然,你需要在eclipse中新建类,我的类名是ClearCache。先给大家看看我的插件,插件写的不行,大家参考就行,大神勿喷!

import java.io.File;


import org.json.JSONArray;
import org.json.JSONException;


import android.app.Activity;
import android.util.Log;
import io.dcloud.common.DHInterface.IWebview;
import io.dcloud.common.DHInterface.StandardFeature;
import io.dcloud.common.util.JSUtil;


/**
 * 清理计算缓存插件
 * @author 香蕉不拿拿
 * @date 2018年4月16日 上午11:44:00
 */
@SuppressWarnings("unused")
public class ClearCache extends StandardFeature{
String pCallBackID;
IWebview pWebviews;
Activity activity;

public void clearPhoneCache(IWebview pWebview, JSONArray array) {
Log.i("成功进入--->", "clearPhoneCache");
pWebviews = pWebview;
activity = pWebview.getActivity();
pCallBackID = array.optString(0);

JSONArray jsonArray = null;
try {
jsonArray = new JSONArray(array.optString(1));
String operateName = jsonArray.getString(0);
if(operateName.equals("countCache")) {
//计算缓存
try {
String cacheSize = ClearCacheUtil.getTotalCacheSize(activity);
Log.i("计算缓存大小---->", cacheSize);

String message = "cacheSize-";
message = message + cacheSize;
JSUtil.execCallback(pWebviews, pCallBackID, message, JSUtil.OK, true);
} catch (Exception e) {
e.printStackTrace();
//计算缓存大小异常
//JSUtil.execCallback(pWebviews, pCallBackID, "Count_Cache_Exception", JSUtil.OK, true);
}
}else if(operateName.equals("clearCache")) {
//清理缓存
Log.i("操作类型---->", "清理缓存");
ClearCacheUtil.clearAllCache(activity.getApplicationContext());
String cacheSize;
try {
cacheSize = ClearCacheUtil.getTotalCacheSize(activity);
Log.i("清理缓存后计算缓存大小---->", cacheSize);
String message = "cacheSize-";
message = message + cacheSize;
JSUtil.execCallback(pWebviews, pCallBackID, message, JSUtil.OK, true);
} catch (Exception e) {
e.printStackTrace();
}

}
} catch (JSONException e) {
e.printStackTrace();
}
}

}

反正写了这么多,给大家废话一下JSUtil.execCallback(pWebviews, pCallBackID, "Count_Cache_Exception", JSUtil.OK, true);这个回调很重要,最后个boolean值,之前玩过false,嘿嘿,那叫真坑,如果是false会导致这个回调不能异步!

上面的代码关联的工具类,说实话,工具类是参考别的大神的创作然后自己改了点。

import java.io.File;
import java.math.BigDecimal;


import android.content.Context;
import android.os.Environment;
import android.util.Log;


public class ClearCacheUtil {
/**
* @param context
* @return
* @throws Exception
*             获取当前缓存
*/
public static String getTotalCacheSize(Context context) throws Exception {
long cacheSize = getFolderSize(context.getCacheDir());
Log.i("ClearCacheUtil--getCacheDir-->", String.valueOf(cacheSize));
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
cacheSize += getFolderSize(context.getExternalCacheDir());
Log.i("ClearCacheUtil--getExternalCacheDir-->", String.valueOf(getFolderSize(context.getExternalCacheDir())));
/*long dataBaseSize = getFolderSize(new File("/data/data/"+ context.getPackageName() + "/databases"));
Log.i("本地数据库文件大小--->", String.valueOf(dataBaseSize));
Log.i("本地数据库路径--->", String.valueOf(context.getPackageName()));*/
}
return getFormatSize(cacheSize);
}


/**
* @param context
*            删除缓存
*/
public static void clearAllCache(Context context) {
boolean state1 = deleteDir(context.getCacheDir());
Log.i("ClearCacheUtil--deleteDir-->", String.valueOf(state1));
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
boolean state2 = deleteDir(context.getExternalCacheDir());
Log.i("ClearCacheUtil--deleteDir-->", String.valueOf(state2));
}
}


private static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
int size = 0;
if (children != null) {
size = children.length;
for (int i = 0; i < size; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}


}
if (dir == null) {
return true;
} else {


return dir.delete();
}
}


// 获取文件
// Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/
// 目录,一般放一些长时间保存的数据
// Context.getExternalCacheDir() -->
// SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
public static long getFolderSize(File file) throws Exception {
long size = 0;
try {
File[] fileList = file.listFiles();
int size2 = 0;
if (fileList != null) {
size2 = fileList.length;
for (int i = 0; i < size2; i++) {
// 如果下面还有文件
if (fileList[i].isDirectory()) {
size = size + getFolderSize(fileList[i]);
} else {
size = size + fileList[i].length();
}
}
}else {
Log.i("fileList-->", "null");
}


} catch (Exception e) {
e.printStackTrace();
}
return size;
}


/**
* 格式化单位 计算缓存的大小

* @param size
* @return
*/
public static String getFormatSize(double size) {
double kiloByte = size / 1024;
if (kiloByte < 1) {
//zero kb
return "0K";
}


double megaByte = kiloByte / 1024;
if (megaByte < 1) {
BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
//小数点后两位(四舍五入)
return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";
}


double gigaByte = megaByte / 1024;
if (gigaByte < 1) {
BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";
}


double teraBytes = gigaByte / 1024;
if (teraBytes < 1) {
BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
}
BigDecimal result4 = new BigDecimal(teraBytes);
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";
}
}

这个测试过,可以实现计算app本地缓存大小和清理本地缓存数据,但是对于清理本地数据库文件的还在琢磨,想要做到显示和清理两个功能,计算到本地数据库的大小一直是0.

插件开发,在你的html页面需要使用的位置调用插件js文件,然后定义插件回调和调用处理方法,调用插件<script src="../js/test/clearPhoneCache.js" type="text/javascript" charset="utf-8"></script>,设置回调函数var values = ['countCache'];getCacheSizeByChaJian(values);

function getCacheSizeByChaJian(values){
console.log("11111")
plus.clearCache.clearPhoneCache(values,function(result){
alert(result);
if(result.indexOf("cacheSize-") != -1 && result.length >=12){
//cacheSize-0K  12个长度
formatCache(result);
}
},function(result){
alert(result)
});

}

formatCache(result);这个只是对回调字符串类型的数据做解析显示在指定标签内的方法,没什么意义,我只发个主要的文件,大家参考后明白原理就够了,毕竟学别人的技术就是学别人的思路嘛,我是小白,我为自己代言。

再次读了写,发现漏掉了个关键点,插件开发,还需要在assets文件的data文件下的dcloud_properties.xml中配置你的插件别名和插件路径<feature name="clearCache" value="com.example.clearCache.ClearCache"></feature>


查看评论

mui中h5清除缓存页面的办法

h5清除页面缓存的办法 今天在工作中遇到一个问题, 我设置了语言切换,修改了语言设置参数,当我返回之前页面时,我的语言切换没有生效,因为以前的页面是从缓存中打开的。不会去执行页面中的JS 代码,所以不...
  • baidu_32519511
  • baidu_32519511
  • 2016-08-10 11:15:00
  • 8255

HTML页面每次打开的时候都清除页面缓存

解决办法为: (1) 用HTML标签设置HTTP头信息 说明:HTTP头信息“Expires”和“Cache-Control”为应用程序服务器提供了...
  • lml_little
  • lml_little
  • 2016-05-31 15:11:21
  • 13253

app清理缓存,此方法适用于mui框架开发app人员参考,使用的是插件开发

app清理缓存,此方法适用于mui框架开发app人员参考,使用的是插件开发,之前采取mui框架自带的清理缓存方式,计算到的缓存大小永远都是0,今天测试发现不行,毕竟在android系统设置中有缓存的显...
  • qq_38322527
  • qq_38322527
  • 2018-04-16 23:02:41
  • 37

清除缓存和版本更新

@Override public void onClick(View view) { switch (view.getId()){ case R.id.qingchu: ...
  • taa1007
  • taa1007
  • 2017-09-22 08:03:22
  • 203

hbuilder做的百度地图搜索

  • 2017年06月19日 18:10
  • 8.09MB
  • 下载

基于mui前端框架开发APP问题总结

实现页面滚动效果: 首先html代码:             --> 红色部分为滚动的基本框架,中间为业务...
  • HUOER168168
  • HUOER168168
  • 2016-12-30 10:46:06
  • 1504

页面缓存js问题解决

1.在jsp中加入头      或者加入         清除临时缓存2.在action,使用如下声明  response.setHeader("Pragma","No-cache");   ...
  • toto1297488504
  • toto1297488504
  • 2015-12-11 10:41:50
  • 2811

h5+app缓存清理插件。

用h5开发app的程序员朋友一定会遇到app永久了缓存堆积的问题。我这边话不多说直接上代码,代码注释清晰,如有不恰当的地方,欢迎提出讨论。 /*!  * 黄国烨(448249687@qq.com)...
  • qq_15556155
  • qq_15556155
  • 2017-12-12 15:36:00
  • 94

MUI框架教程 基于localStorage的便签APP开发源码实例

MUI框架教程,基于localStorage的便签APP开发源码实例,本APP利用MUI框架,基于html5的本地存储localStorage开发,最后使用HBuilder进行打包。...
  • u010035608
  • u010035608
  • 2016-08-26 16:25:49
  • 1395

HybridAPP框架MUI(跨平台移动端应用开发)

在Android和IOS平台上开发应用通过HTML5的方式。由MUI框架快速开发。
  • fanpeihua123
  • fanpeihua123
  • 2015-11-25 09:15:18
  • 3971
    个人资料
    等级:
    访问量: 486
    积分: 81
    排名: 155万+
    文章分类
    文章存档
    最新评论