内容简介:由于项目需要最近在做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类实现计算缓存与清空缓存
新建类、方法
计算缓存:
/** * 获取缓存大小 * @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框架下就几行代码,自己实现java方法就行了。
现在的webapp开发平台有很多,Dcloud、APIcloud、Bingotouch , Cordova(前身为PhoneGap)、BUI、Appcan 等,借助这些平台我们能快速开发出一个跨平台应用,在开发跨平台应用时避免不了需要调用特定平台的原生API,当框架的5+Nactive能力不好使时我们可以尝试自己去写java原生代码(大部分框架是能够满足日常开发需求的),这是一种混合开发模式,自己以后要是需要用原生实现一些功能也可以举一反三。
以上所述就是小编给大家介绍的《MUI调用原生自定义方法实现计算缓存与清空缓存》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- vue+vuex+axios 仿原生app切换效果和路由缓存实践
- 深入云原生 AI:基于 Alluxio 数据缓存的大规模深度学习训练性能优化
- 轻松学会HTTP缓存(强缓存,协商缓存)
- 常见面试题之缓存雪崩、缓存穿透、缓存击穿
- HTTP缓存 - 强缓存/协商缓存/浏览器刷新
- mybatis教程--查询缓存(一级缓存二级缓存和整合ehcache)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
国际大学生程序设计竞赛例题解
郭嵩山 / 电子工业出版社 / 2007-7 / 32.00元
《国际大学生程序设计竞赛例题解3:图论、动态规划算法、综合题专集》以图论、动态规划算法、综合题的形式介绍了ACM国际大学生程序设计竞赛(ACM/ICPC)中所用到的典型算法,并结合例题,对如何灵活地运用这些算法进行比较详细分析和深入浅出的讲解。《国际大学生程序设计竞赛例题解3:图论、动态规划算法、综合题专集》以精讲多练为教学宗旨,并在每一个专题论述后用一章的篇幅选出一批有代表性的竞赛例题,对每道例......一起来看看 《国际大学生程序设计竞赛例题解》 这本书的介绍吧!