上一篇博客传送门:Android常见问题总结(四)


21. Android内存优化方法:ListView优化,及时关闭资源,图片缓存等等

首先有一些与内存泄漏相关的点: 关于Android内存泄露的小结,在此不再赘述了。
还有一些内存优化的方法,个人认为有以下几个方面:
  • Java引用的灵活使用
  • 图片缓存
  • Bitmap压缩加载

Java引用的灵活使用

众所周知,在Java中有强软弱虚四种引用,合理的使用软引用和弱引用有利于GC工作的进行,回收不需要的内存。

图片缓存

使用图片缓存可以有效防止内存中同时载入过多的图片,也可以减少经常载入图片所耗费的时间。 一般而言,设计图片缓存的思路如下,可以把图片的缓存分为以下几个层级:
  • 强引用 HashMap (用于存储最常用的图片)
  • 软引用 HashMap (用于存储比较常用的图片)
  • SD卡 (用于存储使用过的图片)
  • 下载 (第一次使用)
一般而言我们都是用LRU算法(最近最少使用),最近使用的图片一般缓存于强引用的HashMap中,随着使用次数的减少慢慢移动至软引用HashMap、SD卡中。 除了我们自己设计图片缓存外,我们还可以直接使用Google提供的LruCache(内部由LinkedHashMap实现缓存队列),以及DiskLruCache(用于实现硬盘缓存的,需要自行下载, android.googlesource.com/platform/libcore/+/jb-mr2-release/luni/src/main/java/libcore/io/DiskLruCache.java)。

Bitmap压缩加载

对于某些原尺寸特别大的图片,我们可以选择压缩后再加载以节省我们的内存空间:
// 创建解析参数Options options = new Options();// 只解析大小,并不生成实际图片options.inJustDecodeBounds = true;BitmapFactory.decodeFile(pathName, options);// 计算缩放大小int widthScale = options.outWidth/width_we_need;int heightScale = options.outHeight/height_we_need;// 选取小的为缩放尺寸options.inSampleSize = Math.min(widthScale, heightScale);// 生成Bitmapoptions.inJustDecodeBounds = false; // 记得关掉Bitmap bitmap = BitmapFactory.decodeFile(pathName, options);

压缩到合适的尺寸后再加载就不必担心原来的bitmap太大而占用内存空间了。

22. Android中弱引用与软引用的应用场景

软引用与弱引用一般用于:需要某个对象,但又不关心它的死活的时候(就是该对象存在就用,不存在就算了)。 在Android中的应用场景主要有:
  • Handler获取Activity的引用:使用静态变量和软弱引用保证不干扰Activity的回收
  • 缓存设计:使用软弱应用保证内存紧张时GC可以回收使用较少的缓存资源

24. View与View Group分类,自定义View过程:onMeasure()、onLayout()、onDraw()

View是Android中基本的UI单元,占据屏幕的一块矩形区域,可用于绘制并能处理事件,而ViewGroup是View的子类,他能包含多个View,并让他们在其中按照一定的规则排列。VIew与ViewGroup的设计使用了组合模式。
自定义View我们一般需要重写一下三个方法:
  • onMeasure:用于测量自定义View的大小,在方法中必须调用setMeasureDimension方法
  • onLayout:用于确定自定义View布局
  • onDraw:用于绘制自定义View本身
对于measure、layout、draw的更详细流程可参考我的另一篇博客: 一个Activity的显示过程总结(四)

25. Touch事件分发机制

可参考: Android View 与 ViewGroup 事件分发总结

更多相关文章

  1. 【Android(安卓)4.0】Android(安卓)Icon Set的使用
  2. Android缓存浅析
  3. Android(安卓)ImageView 的scaleType 属性图解
  4. android:background="@drawable/"图片拉伸问题
  5. android之图片切圆角
  6. Android(安卓)H5和App交互以及打开图库上传图片并显示
  7. Android之drawable和mipmap目录区别
  8. Android(安卓)开发之Matrix图片处理类的使用
  9. Android控件之利用selector自定义的带文字的图片按钮

随机推荐

  1. Android(安卓)listview适配器
  2. Android(安卓)地址选择器仿京东;
  3. Android中的drawable像素密度适配详解
  4. Android败笔之ListView设置分割线颜色
  5. Android(安卓)- 修改最小SDK版本(minSdkV
  6. Android(安卓)ObjectAnimator基础用法
  7. Android(安卓)向服务器发送get请求乱码问
  8. 我拆了个轮子--ANDROID WHEEL的实现(二)
  9. Android(安卓)WebView 总结 —— 使用HTM
  10. 解决S5pv210 adb push u-boot.bin /syste