作家
登录

如何在Android App上高效显示位图

作者: 来源: 2017-05-09 15:05:52 阅读 我要评论

BitmapWorkerTask(ImageView imageView) { // Use a WeakReference to ensure the ImageView can be garbage collected imageViewReference = new WeakReference<ImageView>(imageView); } // Decode image in background. @Override protected Bitmap doInBackground(Integer... params) { data = http://mobile.51cto.com/params[0]; return decodeSampledBitmapFromResource(getResources(), data, 100, 100)); } //>@Override protected void onPostExecute(Bitmap bitmap) { if (imageViewReference != null && bitmap != null) { final ImageView imageView = imageViewReference.get(); if (imageView != null) { imageView.setImageBitmap(bitmap); } } }}

图像缓存

每当对图像进行解码并放置在一个视图中的时刻,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)日前撰文,阐述了当今社会对人工智能的五大年夜误会,并对背后的逻辑和理论展开了具体阐述。以下为文┞仿全文:我听到>>>详细阅读


本文标题:如何在Android App上高效显示位图

地址:http://www.17bianji.com/lsqh/35095.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)