美文网首页
InkBoard图片缓存方案

InkBoard图片缓存方案

作者: 何荣虎 | 来源:发表于2019-05-26 18:06 被阅读0次

    一、为什么需要做图片缓存?

    1)慢(获取缩略图慢、生成二维码慢、切页慢等),缓存的数量有限,如果没有生成就去获取还是慢,墨水屏上使用bitmap.compress(format, CACHE_PNG_IMAGE_QUALITY, jpgOutputStream)生成一张1404*1872的图片大概3s

    2)统一管理,避免重复生成图片

    二、缓存方案

    获取图片的方式:

    1)获取某个页面的bitmap,该bitmap不带背景,是一张绘制了元素的透明bitmap;

    2)获取某个页面图片的本地文件绝对路径,该路径的图片文件是带背景的。

    为什么获取方式是这样的?

    1)切换页面时需要透明的图片,否则无法切换背景;

    2)因为内存问题不再内存缓存一份带背景的bitmap,统一通过文件绝对路径提供屏幕大小的图片。

    流程图:

    图1

    缓存方式:

    1)在切换页面的时候触发缓存页面(可以设置当前页前后n页进行缓存,每次切页当前页不做缓存)

    2)不使用LruCache方式,因为那样控制不了哪一页该被释放,也就无法缓存自己希望的页面bitmap

    需要解决的问题:

    1)避免频繁创建bitmap引起频繁GC

         1、不再使用的Bitmap不要recycle,使用软引用保留起来下次使用

         2、通过Option的inBitmap复用

         3、Bitmap一定要是可变的,即inMutable设置一定为ture

         4、Android2.3以及更低的版本不能使用Bitmap复用的方式

         5、Android3.0以上Android4.4以下的平台,须要保证inBitmap和即将要得到decode的Bitmap的尺寸规格一致

        6、Android4.4及其以上的平台,仅仅须要满足inBitmap的尺寸大于要decode得到的Bitmap的尺寸规格就可以

        7、使用bitmap复用时如果涉及到透明图片要用png格式图片

    谷歌文档:https://developer.android.com/topic/performance/graphics/manage-memory.html#kotlin

    图2

    相关文章

      网友评论

          本文标题:InkBoard图片缓存方案

          本文链接:https://www.haomeiwen.com/subject/gbjftctx.html