Android应用开启图片加载和防止图片解析溢出的小例子
来源:互联网 发布:淘宝买药可靠吗 编辑:程序博客网 时间:2024/05/16 15:06
最近项目有了重新自动配置启动图片的需求,虽然没分到我,但是作为应用程序最常用到的功能,我还是比较有兴趣,加上最近还比较闲,也不怎么DOTA了,就写了一个相关功能实现的DEMO,DEMO写的比较粗略,甚至没有判断URLConnecttion的状态,大家主要看一下防止图片溢出和读写文件,以及异步刷新至主页的过程吧。
先大致将一下流程,流程主要是先判断启动图片文件夹有没有下载成功的图片,如果没有,启动下载图片任务,并直接进行把图片读写至SDCARD,
// TODO Auto-generated method stubif (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){File sd = Environment.getExternalStorageDirectory();String _Path = sd.getPath() + "/loadImg";File _file = new File(_Path);Log.d(TAG,"LoadingImgBackground Start:"+_Path);//如果不存在,则新建文件夹,并且开启工具类下载启动图片if (! _file.exists()){_file.mkdir();Utility.getInstance().downLoadImg();}//如果存在文件夹,则查找文件夹里面有没有现成的文件else{//如果文件夹里面有文件,则解析图片,并加载if(_file.list().length >0){String[] _FileName = _file.list();Bitmap localDrawable = Utility.getDrawableFromFile(sd.getPath() + "/loadImg/"+_FileName[0]);if(localDrawable != null){m_imgWelcome.setImageBitmap(localDrawable);}else{Utility.getInstance().downLoadImg();m_imgWelcome.setBackground(getResources().getDrawable(R.drawable.welcomeimg));}}//SD卡文件夹没有文件的话也去下载else{m_imgWelcome.setBackground(getResources().getDrawable(R.drawable.welcomeimg));Utility.getInstance().downLoadImg();}}}//如果没有SD卡直接加载默认图片else{m_imgWelcome.setBackground(getResources().getDrawable(R.drawable.welcomeimg));}m_handlerForLoading.postDelayed(this, 3000);
以上主要是配置启动图片的函数,设置好背景图片后,启动handler,推迟3秒钟跳到主ACTIVITY,下面再看看另一个主要的关键点,解析图片,防止OOM,图片OOM主要是因为图片太大以及DPI过高,我这里询问过公司UED的同事,会不会有图片小例如300X300,文件大小却超过2M的情况,得到的答案以及实践操作结果,是不存在的,因而可以认为图片OOM的主要原因是图片尺寸过大造成的,在这里需要特别注意一个属性options.inJustDecodeBounds,查看SDK文档
public boolean inJustDecodeBounds
If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels.
可以明显看到,当option的这个属性为true时,可以对图片进行预处理,即不分配内存也可以读出图片的尺寸,这个就很明显了,我们可以先预读出图片的尺寸,再确定缩放比例的计算,就可以避免OOM的出现,这里是通过函数
private static Options getOptions(String string) {// TODO Auto-generated method stubOptions options = new Options();options.inJustDecodeBounds = true;BitmapFactory.decodeFile(string, options);return options;}
先预读出解析使用的option,在配置新的option并设置缩放比属性inSampleSize完成的。
话不多说,附上免积分下载DEMO,运行后有福利哦。。
Demo地址
- Android应用开启图片加载和防止图片解析溢出的小例子
- android 加载图片防止内存溢出
- Android加载图片,防止内存溢出
- 防止加载图片内存溢出的方法
- android项目源码异步加载远程图片的小例子
- android项目源码异步加载远程图片的小例子
- android项目源码异步加载远程图片的小例子
- SDL加载和缩放图片小例子
- SDL加载和缩放图片小例子
- android 加载图片防止oom的处理
- Android Bitmap图片处理,防止内存溢出
- Android--图片加载处理(内存溢出和三级缓存)
- android图片加载防止OOM LruCache和DiskLruCache使用
- ListView如何加载网络图片,防止内存溢出
- 解决Android加载图片时内存溢出的问题
- 解决Android加载图片时内存溢出的问题
- 解决Android加载图片时内存溢出的问题
- Android解决加载图片时内存溢出的问题
- 前景检测方面的研究
- 数据机构-四种链表
- angularJS开发指南(angularJS developer guide) 之二
- 杭电2025
- 进程与线程的一个简单解释
- Android应用开启图片加载和防止图片解析溢出的小例子
- A survey on the communication architectures in smart grid(2)
- 关于百度地图显示自己的位置
- C++ primer 学习(2)
- Scheme基本概念之vector
- HDU2064:汉诺塔III
- ftp 主动和被动
- mplayer使用详细说明
- domino 中 UniversalID 和NoteID的区别