图像缓存
每当对图像进行解码并放置在一个视图中的时刻,Android操作体系默认反复全部衬着过程,浪费了宝贵的设备存储器。如不亚妹计算在不合的处所展示雷同的图像,或因为app生命周期或行动要多次从新加载,那么这可能会特别常人。
为了避免占用过多的内存,推荐应用内存和磁盘缓存。接下来,我们将看到这些缓存之间的重要差别,以及为什么同时应用两者有效的原因。代码在这里显示的话太复杂了,所以请自行参阅Google指那9依υ?图缓存部分以懂得若何实现内存和磁盘的缓存。
- 内存缓存:图像存储在设备内存中。内存拜访快速。事实上,比图像解码过程要快得多,所以将图像存储在这里是让app更快更稳定的一个好主意。内存缓存的独一缺点是,它只存活于app的生命周期,这意味着一旦app被Android操作体系内存治理器封闭或杀逝世(全部或部分),那么储存在那边的所有图像都将损掉。请记住,内存缓存必须设置一个最大年夜可用的内存量。不然可能会导致臭名昭著的outOfMemoryError。
- 磁盘缓存:图像存储在设备的物理存储器上(磁盘)。磁盘缓存可以一向存活于app启动时代,安然地存储图片,只要有足够的空间。缺点是,磁盘攫取和写入操作可能会很慢,并且老是比拜访内存缓存慢。因为这个原因,是以所有的磁盘操作必须在工作线程履行,UI线程之外。不然,app会冻结,并导致ANR戒备。
每个缓存都有其长处和缺点,是以最好的做法是两者皆用,并大年夜起首可用的处所攫取,经由过程内存缓存开端。
最后的思虑以及EpicBitmapRenderer
不知道你有没有留意到,正如我在本文开首所述,在Android app上显示图片真的很让人头疼。绝非看上去那么简单。
EpicBitmapRenderer
易于应用,并在每个图像解码操作中主动化了所有这些末路人的义务,如许你就可以专注于app开辟。
为了避免这种情况,正如Google所说的那样,我们应当应用BitmapFactory
解码图像,为inSampleSize
参数设置一个值。图象尺寸由inSampleSize划分,削减存储器的应用量。
你只须要添加增长EpicBitmapRenderer
依附袈溱你的Gradle上(查看其他构建对象的替代品,看看EpicBitmapRenderer文档的导入库部分)。
compile 'com.isaacrf.epicbitmaprenderer:epicbitmaprenderer:1.0'
在EpicBitmapRenderer
中解码图像是很轻易的:只须要调用所需的解码办法并治理结不雅。看看下面这个例子,我们大年夜URL获取图片并显示于ImageVIew上。
//Sample 3: Decode Bitmap from URL (Async)EpicBitmapRenderer.decodeBitmapFromUrl( "http://isaacrf.com/wp-content/themes/Workality-Lite-child/images/IsaacRF.png", 200, 200, new>@Override public void onBitmapRendered(Bitmap bitmap) { //Display rendered Bitmap when ready ImageView imgView = findViewById(R.id.imgSampleDecodeUrl); imgView.setImageBitmap(bitmap); } }, new>@Override public void onBitmapRenderFailed
推荐阅读
【AI世代编者按】美国《连线》杂志开创主编凯文-凯利(Kevin Kelly)日前撰文,阐述了当今社会对人工智能的五大年夜误会,并对背后的逻辑和理论展开了具体阐述。以下为文┞仿全文:我听到>>>详细阅读
地址:http://www.17bianji.com/lsqh/35095.html
1/2 1