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调用原生自定义方法实现计算缓存与清空缓存》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Big Java Late Objects

Big Java Late Objects

Horstmann, Cay S. / 2012-2 / 896.00元

The introductory programming course is difficult. Many students fail to succeed or have trouble in the course because they don't understand the material and do not practice programming sufficiently. ......一起来看看 《Big Java Late Objects》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码