Android 优化

编程入门 行业动态 更新时间:2024-10-26 05:21:10

<a href=https://www.elefans.com/category/jswz/34/1771384.html style=Android 优化"/>

Android 优化

一、概念

用于实现存储设备缓存,即磁盘缓存,通过将缓存对象写入文件系统从而实现缓存的效果。

二、使用

2.1 添加依赖

最新依赖

implementation "com.jakewharton:disklrucache:2.0.2"

2.2 配置权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2.3 创建对象 open()

public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize)
directory

存储路径,该文件夹里面所有文件参与计算大小。

appVersion应用的版本号,一般设为 1 即可。当版本号发生改变时会清空之前所有的缓存文件,而这个特性在实际开发中作用并不大,很多情况下即使应用的版本号发生了改变缓存文件却仍然是有效的。
valueCount表示同一个 key 可以对应多少个缓存文件,一般设为 1 即可。
maxSize表示缓存的总大小,比如 50MB,当缓存大小超出这个设定值后,DiskLruCache 会清除一些缓存从而保证总大小不大于这个设定值。
  • 缓存的key为String类型,且必须匹配正则表达式[a-z0-9_-]{1,64}。
  •  一个key可以对应多个value,value类型为字节数组,大小在0 ~ Integer.MAX_VALUE之间
  • 缓存的目录必须为专用目录,因为DiskLruCache可能会删除或覆盖该目录下的文件。
  • 添加缓存操作具备原子性,但多个进程不应该同时使用同一个缓存目录。 
/*** 外置路径:storage/emulated/0/Android/data/包名/cache* 内置路径:data/data/包名/ceche* @param cachePath 如果外置存储获取不到就从内置存储中获取,调用 context.externalCacheDir?.path ?: context.cacheDir.path*/
class BitmapDiskCache(private val cachePath: String
) {private val cacheSize =  (1024 * 1024 * 50).toLong() //50Mprivate val file = File(cachePath.plus("BitmapLru")).apply { if (!exists()) mkdirs() }private val instance = DiskLruCache.open(file, 1, 1, cacheSize)suspend fun put(key: String, value: Bitmap) = withContext(Dispatchers.IO) {instance.use { cache ->//获取编辑器cache.edit(key).run {//获取输出流(0表示第一个缓存文件,不能超过创建时设置的valueCount)newOutputStream(0).use { outputStream ->//写入Bitmapvaluepress(Bitmap.CompressFormat.PNG, 100, outputStream)}//提交commit()}}}suspend fun get(key: String): Bitmap? = withContext(Dispatchers.IO) {instance.use { cache ->//获取快照cache.get(key).run {//获取输入流(0表示第一个缓存文件,不能超过创建时设置的valueCount)getInputStream(0).use { inputStream ->//读取BitmapBitmapFactory.decodeStream(inputStream)}}}}suspend fun remove(key: String) = withContext(Dispatchers.IO) {instance.use { cache ->cache.remove(key)}}}

更多推荐

Android 优化

本文发布于:2023-12-04 23:54:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1662498.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!