欢迎来到天天文库
浏览记录
ID:27094993
大小:495.51 KB
页数:21页
时间:2018-12-01
《《android内存》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、android内存管理──朱鹏自我介绍朱鹏Android开发工程师qq:752061935手机:15618953973二手房租房新房WhyAndroid系统有自己的垃圾回收机制,可以自动回收内存空间。那为什么还需要专门做个针对内存管理做一个分享呢?答案很简单:crash!!!Bitmap谈到android内存管理这里不得不提的一个对象就是Bitmap。内存大户而一个andriod程序运行过程中所占用的内存(native+dalvik)超过>16M(默认)OOM查看内存使用情况adbshelldumpsysmeminfo$pac
2、kage_nameor$pidBitmap对象bitmap对象android虚拟机(DVM)linux底层C内存recycle()首先明确一点无论你调用不调用recycle()方法,android程序都不会内存泄露。recycle只做了一件事:Thebitmapismarkedas'dead'。recycle真的用途在于:它可以帮助GC快速决定是否回收这个对象,当一个应用包含大量的图片的时候,这个方法还是很有作用的,因为GC并没有你想象的聪明。recycle()具体使用//先判断是否已经回收if(bitmap!=null&&!
3、bitmap.isRecycled()){//回收并且置为nullbitmap.recycle();bitmap=null;}这里再介绍一个比较实用的方法if(imageView!=null&&imageView.getDrawable()!=null){BitmapoldBitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap();imageView.setImageDrawable(null);if(oldBitmap!=null){oldBitmap.recyc
4、le();}}建议在一个大量使用图片的应用中activity继承以下BaseActivitypublicclassBaseActivity{ArrayList>bitmapCache=newArrayList>();@OverrideprotectedvoidonDestroy(){for(SoftReferencesb:bitmapCache){回收操作}super.onDestroy();}}bitmap什么时候会导致程
5、序OOM单张图片过大解决方案:1、调整dvm单个堆栈大小2、压缩图片3、切割图片小图片累积过多解决方案:1、用完即手动recycle图片压缩小技巧在使用BitmapFactory压缩图片的时候,BitmapFactory.Options设置inJustDecodeBounds为true后,再使用decodeFile()等方法,可以在不分配空间状态下计算出图片的大小。示例:BitmapFactory.Optionsopts=newBitmapFactory.Options();//设置inJustDecodeBounds为tru
6、eopts.inJustDecodeBounds=true;//使用decodeFile方法得到图片的宽和高BitmapFactory.decodeFile(path,opts);//打印出图片的宽和高Log.d("example",opts.outWidth+","+opts.outHeight);(ps:原理其实就是通过图片的头部信息读取图片的基本信息)Bitmap在listview和gallery中的典型使用Map>mBitmapList;publicvoidlo
7、adImage(imageView,url){1、根据url从内存即mBitmapList读取地图,如果内存没有读到图片则进行第二步。2、根据url读取本地图片,如果没有读取到,则进行第三步。3、将url加入下载队列,下载成功后将bitmap加入内存缓存即mBitmapList。}ps:在listview和gallery滑动的过程中可以不断手动recycle()不用的bitmap对象,维持内存缓存mBitmapList固定大小,这样可以减小oom发生的概率。gallery的问题经过以上处理之后你会发现listview很好用了,
8、很难在发生OOM。但是你会发现一个问题,这种方法在gallery上总是不好用,要不是出现OOM,就是抛出异常trytorecycleausingbitmap。这是为什么呢?gallery相关的adapter的常见写法classGalleryAdapterextendsBase
此文档下载收益归作者所有