MUI调用原生自定义方法实现计算缓存与清空缓存

栏目: Java · 发布时间: 6年前

内容简介:由于项目需要最近在做webapp开发用的是MUI框架,自己本来是做原生开发的,在开发的时候有一个需求是实现计算缓存和清除缓存的功能,原生java方法实现轻轻松松,网上代码一大把,不过是webapp倒是不好搞,MUI自己是有套原生模块调用,而且有这个计算缓存的方法API,不过遗憾的是在安卓端有bug,获取不到缓存大小(他们客服说的~~),自己测试确实是这样,不好使。IOS听说没事。。。这就有点尬了@#¥#&……*……想办法查资料,web浏览器套壳肯定可以js调用java原生方法?可以的,结合他们官方文档。动

由于项目需要最近在做webapp开发用的是MUI框架,自己本来是做原生开发的,在开发的时候有一个需求是实现计算缓存和清除缓存的功能,原生 java 方法实现轻轻松松,网上代码一大把,不过是webapp倒是不好搞,MUI自己是有套原生模块调用,而且有这个计算缓存的方法API,不过遗憾的是在安卓端有bug,获取不到缓存大小(他们客服说的~~),自己测试确实是这样,不好使。IOS听说没事。。。这就有点尬了@#¥#&……*……想办法查资料,web浏览器套壳肯定可以js调用java原生方法?可以的,结合他们官方文档。动手撸起来

1、安卓本地离线打包

这个不用说,用这个框架要会用as打包,会安卓原生开发打包会发现很简单的~~~,文档,用as先跑起来,因为我们需要自己写java方法实现这个缓存计算与清除,然后js去调用。

2、定义java类实现计算缓存与清空缓存

新建类、方法 MUI调用原生自定义方法实现计算缓存与清空缓存

计算缓存:

/**
 * 获取缓存大小
 * @param context
 * @return
 * @throws Exception
 */
public static String getTotalCacheSize(Context context) throws Exception {
    long cacheSize = getFolderSize(context.getCacheDir());
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        cacheSize += getFolderSize(context.getExternalCacheDir());
    }
    return getFormatSize(cacheSize);
}

public static long getFolderSize(File file) throws Exception {
    long size = 0;
    try {
        File[] fileList = file.listFiles();
        for (int i = 0; i < fileList.length; i++) {
            // 如果下面还有文件
            if (fileList[i].isDirectory()) {
                size = size + getFolderSize(fileList[i]);
            } else {
                size = size + fileList[i].length();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return size;
} /**
     * 格式化单位
     *
     * @param size
     * @return
     */
    public static String getFormatSize(double size) {
        double kiloByte = size / 1024;
//        if (kiloByte < 1) {
//            return size + "Byte";
//        }

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

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

        double teraBytes = gigaByte / 1024;
        if (teraBytes < 1) {
            BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
            return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
                    .toPlainString() + "G";
        }
        BigDecimal result4 = new BigDecimal(teraBytes);
        return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
                + "T";
    }
复制代码

清空缓存:

/**
 * 清空缓存
 * @param context
 */
public static void clearAllCache(Context context) {
    deleteDir(context.getCacheDir());
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        deleteDir(context.getExternalCacheDir());
    }

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

三、JS调用

首先判断平台,这个MUI有api判断是安卓还是ios,因为这个只是安卓端有问题我们在安卓端进行处理就ok,ios就用他们提供的方法。然后在js中导入我们这个类,要全路径,

CleanDataUtils = plus.android.importClass("com.oking.wisdomMeteorological.utils.CleanDataUtils");复制代码

计算缓存:

调用这个类的方法,我们定义的java方法需要传入上下文这里传入activity对象就是

totalCacheSize = CleanDataUtils.getTotalCacheSize(plus.android.runtimeMainActivity());复制代码
totalCacheSize 就是我们获取到的缓存大小。复制代码

清除缓存同上:

CleanDataUtils.clearAllCache(plus.android.runtimeMainActivity());复制代码

效果:

MUI调用原生自定义方法实现计算缓存与清空缓存

看到这里是不是觉得很简单,确实很简单,在MUI框架下就几行代码,自己实现java方法就行了。

现在的webapp开发平台有很多,Dcloud、APIcloud、Bingotouch , Cordova(前身为PhoneGap)、BUI、Appcan 等,借助这些平台我们能快速开发出一个跨平台应用,在开发跨平台应用时避免不了需要调用特定平台的原生API,当框架的5+Nactive能力不好使时我们可以尝试自己去写java原生代码(大部分框架是能够满足日常开发需求的),这是一种混合开发模式,自己以后要是需要用原生实现一些功能也可以举一反三。


以上所述就是小编给大家介绍的《MUI调用原生自定义方法实现计算缓存与清空缓存》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

国际大学生程序设计竞赛例题解

国际大学生程序设计竞赛例题解

郭嵩山 / 电子工业出版社 / 2007-7 / 32.00元

《国际大学生程序设计竞赛例题解3:图论、动态规划算法、综合题专集》以图论、动态规划算法、综合题的形式介绍了ACM国际大学生程序设计竞赛(ACM/ICPC)中所用到的典型算法,并结合例题,对如何灵活地运用这些算法进行比较详细分析和深入浅出的讲解。《国际大学生程序设计竞赛例题解3:图论、动态规划算法、综合题专集》以精讲多练为教学宗旨,并在每一个专题论述后用一章的篇幅选出一批有代表性的竞赛例题,对每道例......一起来看看 《国际大学生程序设计竞赛例题解》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具