android应用开发的图片优化加载方案
摘要:近几年来,Android以其开放的特性和良好的操作体验,超越了IOS成为移动端第一大平台,越来越多的Android应用涌现使得应用间的竞争愈发激烈。图片让应用变得美观,是优质应用的必备条件。本文针对Android应用开发中的图片,分析了图片处理带来的一系列问题,并针对这些问题从图片网络请求和图片缓存两个方面设计了一种优化加载图片的方案。其中网络请求模块利用线程池和请求队列提升了系统性能,缓存模块采用了二级缓存的设计。最后从内存、电量、网络流量和加载时间对优化方案进行了评测。
目录
摘要1
关键词1
Abstract1
Key words 1
选题背景 2
问题的提出2
国内外研究现状2
研究目的和内容3
优化方案 3
整体设计4
网络请求与调度4
请求队列5
线程池5
图片压缩6
多线程并发加载8
图片缓存9
图片缓存概念9
图片缓存必要性 10
图片缓存策略 10
MemoryCache 11
DiskCache 13
性能与评测15
评测工具 15
评测环境 17
内存(Memory) 18
网络流量(Net Work) 20
时间(Time) 21
电量(Battery)22
总结与展望25
论文总结 25
工作展望 25
致谢 26
参考文献 26
基于Android应用开发的图片优化加载方案
引言
自从2007年Google公司推出Android[1]系统以来,一直受到人们的追捧。Google play中的应用如雨后春笋般涌现,用户对应用的选择不再仅仅局限于功能的完善,更要美观流畅。
在Android应用开发中,图片的使用可以让应用变得美观,增强用户体验,但是同样会带来很多性能问题。Android图片是以位图(bitmap)
*好棒文|www.hbsrm.com +Q: ¥351916072¥
的格式呈现,其非压缩的特性导致图片会耗费大量内存,引发OOM错误。另外低效的图片加载不仅会让应用变得卡顿甚至崩溃,还会浪费终端的电量和流量。所以图片的优化处理在Android的开发中是至关重要的。
选题背景
问题的提出
随着Android市场中的应用数量不断增长,更多的选择使得Android用户对应用的要求越来越高,美观的图片逐渐成为了Android应用不可获取的一部分,但是随之而来的还有图片带来的技术挑战。
问题1:早期Android应用程序内存的限制是16MB,一张分辨率为2048*1536 的图片(假设Bitmap配置为ARGB_8888)所占内存为12MB,如果不作任何处 理,两张这样的图片就会造成内存溢出(OOM)错误。
问题2:在一些大量使用图片的应用(如新闻客户端)中,一般每张图片的下 载对应唯一的URL,在后台需要单独开启一个线程执行下载任务。线程创建 和销毁的时间将大于线程任务执行的时间,造成系统性能的缺失以及频繁 的GC操作。对用户来说就说应用的卡顿。
问题3:在Android应用中,如果每次访问图片资源都从网络获取,这样既 浪费流量也浪费时间,重复的网络请求也加剧了手机电量的消耗,严重影 响用户体验。
综上所示,本文设计实现了一种Android应用开发中高效加载图片的方案来避免以上问题的出现。
1.2 国内外研究现状
Android是一种基于Linux的开源操作系统,由Google联合多家移动运营商和公司在2007年11月成立的Open Handset Alliance[2](OHA,开放手机联盟)持续主导和开发,主要适用于移动端设备,如智能手机和平板电脑。Android以其开发和不受平台限制的特点一经推出就得到各大手机制造商和厂家的支持,纷纷推出基于Android平台的智能手机,例如国外的三星、LG、索爱,国内的华为、联想、小米和魅族,Android逐渐成为了移动端最热的名词。
在2014年Google I/O开发者大会上Google宣布过去30天里有10亿台活跃的安卓设备,相较于2013年6月则是5.38亿。据知名咨询公司Gartner的统计,在2015年全球智能手机市场中,第一季度Android平台手机的销量为2亿6501万台,远远超过IOS平台手机的6018万台,在第二季度和第三季度的市场检测报告中Android的市场份占到了80%以上,出货量近3亿部。而在2012年,Android的市场占有率不到六成[3]。可见这几年Android市场发展的迅速和火热。
Android与其他操作系统有很大的区别,它的开源性和良好的用户体验是其成为了移动互联网时代的主角的原因 [4]。作为第一个完整、开放、免费的手机开发平台,Android使开发者在开发程序的过程中能够获得更大的自由[5]。Google公司通过设立百万美金的奖金吸引世界各地的开发者加入Android开发社区中,大大推进了Android生态的繁荣,从此Android系统在全球人民的共同努力下日趋完善。JAVA的开发语言也让Android的入门变得简单,在移动端应用开发上广受程序员的青睐。
随着Android的热度越来越高,各种基于Android的应用程序如雨后春笋般涌现。如网易新闻、虾米音乐、新浪微博等高质量的应用让用户能够通过手机浏览新闻、收听音乐、发表动态等。这些优质应用的成功让更多的开发人员加入Android开发的浪潮中。
越来越多的Android应用让应用间的竞争变的激烈,优质应用才具有更强的竞争力。图片是应用美观的主要因素,在一个应用中大量使用图片是难免的,比如新闻客户端。大量图片的使用会过度占用Android的内存,引发OOM,并且图片的加载效率直接影响用户移动流量和手机终端的电量,图片处理的重要性可见一斑。
2013年,square公司开源了自己的图片加载库Picasso,Picasso实现了图片的异步加载,并且使用了复杂的图片压缩技术减少了内存的消耗,但是 Picasso只是实现了内存级别的缓存,没有硬盘缓存,当应用由于某种原因被回收时,用户需要重新处理加载过的图片。2015年,Facebook公司推出了功能强大且全面的图片加载库Fresco,Fresco可以从网络、本地存储、本地资源三种途径加载图片,当图片从屏幕上消失时,会自动释放内存,图片的渐进式显示也带来了更好的用户体验,但是Fresco过于庞大,不是图片比较多的应用没有太大必要使用。
1.3研究的目的和内容
1.2.1 研究目的
目录
摘要1
关键词1
Abstract1
Key words 1
选题背景 2
问题的提出2
国内外研究现状2
研究目的和内容3
优化方案 3
整体设计4
网络请求与调度4
请求队列5
线程池5
图片压缩6
多线程并发加载8
图片缓存9
图片缓存概念9
图片缓存必要性 10
图片缓存策略 10
MemoryCache 11
DiskCache 13
性能与评测15
评测工具 15
评测环境 17
内存(Memory) 18
网络流量(Net Work) 20
时间(Time) 21
电量(Battery)22
总结与展望25
论文总结 25
工作展望 25
致谢 26
参考文献 26
基于Android应用开发的图片优化加载方案
引言
自从2007年Google公司推出Android[1]系统以来,一直受到人们的追捧。Google play中的应用如雨后春笋般涌现,用户对应用的选择不再仅仅局限于功能的完善,更要美观流畅。
在Android应用开发中,图片的使用可以让应用变得美观,增强用户体验,但是同样会带来很多性能问题。Android图片是以位图(bitmap)
*好棒文|www.hbsrm.com +Q: ¥351916072¥
的格式呈现,其非压缩的特性导致图片会耗费大量内存,引发OOM错误。另外低效的图片加载不仅会让应用变得卡顿甚至崩溃,还会浪费终端的电量和流量。所以图片的优化处理在Android的开发中是至关重要的。
选题背景
问题的提出
随着Android市场中的应用数量不断增长,更多的选择使得Android用户对应用的要求越来越高,美观的图片逐渐成为了Android应用不可获取的一部分,但是随之而来的还有图片带来的技术挑战。
问题1:早期Android应用程序内存的限制是16MB,一张分辨率为2048*1536 的图片(假设Bitmap配置为ARGB_8888)所占内存为12MB,如果不作任何处 理,两张这样的图片就会造成内存溢出(OOM)错误。
问题2:在一些大量使用图片的应用(如新闻客户端)中,一般每张图片的下 载对应唯一的URL,在后台需要单独开启一个线程执行下载任务。线程创建 和销毁的时间将大于线程任务执行的时间,造成系统性能的缺失以及频繁 的GC操作。对用户来说就说应用的卡顿。
问题3:在Android应用中,如果每次访问图片资源都从网络获取,这样既 浪费流量也浪费时间,重复的网络请求也加剧了手机电量的消耗,严重影 响用户体验。
综上所示,本文设计实现了一种Android应用开发中高效加载图片的方案来避免以上问题的出现。
1.2 国内外研究现状
Android是一种基于Linux的开源操作系统,由Google联合多家移动运营商和公司在2007年11月成立的Open Handset Alliance[2](OHA,开放手机联盟)持续主导和开发,主要适用于移动端设备,如智能手机和平板电脑。Android以其开发和不受平台限制的特点一经推出就得到各大手机制造商和厂家的支持,纷纷推出基于Android平台的智能手机,例如国外的三星、LG、索爱,国内的华为、联想、小米和魅族,Android逐渐成为了移动端最热的名词。
在2014年Google I/O开发者大会上Google宣布过去30天里有10亿台活跃的安卓设备,相较于2013年6月则是5.38亿。据知名咨询公司Gartner的统计,在2015年全球智能手机市场中,第一季度Android平台手机的销量为2亿6501万台,远远超过IOS平台手机的6018万台,在第二季度和第三季度的市场检测报告中Android的市场份占到了80%以上,出货量近3亿部。而在2012年,Android的市场占有率不到六成[3]。可见这几年Android市场发展的迅速和火热。
Android与其他操作系统有很大的区别,它的开源性和良好的用户体验是其成为了移动互联网时代的主角的原因 [4]。作为第一个完整、开放、免费的手机开发平台,Android使开发者在开发程序的过程中能够获得更大的自由[5]。Google公司通过设立百万美金的奖金吸引世界各地的开发者加入Android开发社区中,大大推进了Android生态的繁荣,从此Android系统在全球人民的共同努力下日趋完善。JAVA的开发语言也让Android的入门变得简单,在移动端应用开发上广受程序员的青睐。
随着Android的热度越来越高,各种基于Android的应用程序如雨后春笋般涌现。如网易新闻、虾米音乐、新浪微博等高质量的应用让用户能够通过手机浏览新闻、收听音乐、发表动态等。这些优质应用的成功让更多的开发人员加入Android开发的浪潮中。
越来越多的Android应用让应用间的竞争变的激烈,优质应用才具有更强的竞争力。图片是应用美观的主要因素,在一个应用中大量使用图片是难免的,比如新闻客户端。大量图片的使用会过度占用Android的内存,引发OOM,并且图片的加载效率直接影响用户移动流量和手机终端的电量,图片处理的重要性可见一斑。
2013年,square公司开源了自己的图片加载库Picasso,Picasso实现了图片的异步加载,并且使用了复杂的图片压缩技术减少了内存的消耗,但是 Picasso只是实现了内存级别的缓存,没有硬盘缓存,当应用由于某种原因被回收时,用户需要重新处理加载过的图片。2015年,Facebook公司推出了功能强大且全面的图片加载库Fresco,Fresco可以从网络、本地存储、本地资源三种途径加载图片,当图片从屏幕上消失时,会自动释放内存,图片的渐进式显示也带来了更好的用户体验,但是Fresco过于庞大,不是图片比较多的应用没有太大必要使用。
1.3研究的目的和内容
1.2.1 研究目的
版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jsj/jsjkxyjs/2240.html