android 内存优化

OOM

内存泄漏引发很多问题:

1:程序卡顿,响应速度慢(内存占用高时JVM 虚拟机会频繁出发GC)

2:莫名其妙消失

3:直接崩溃

 

ANDROID 内存面临的问题

1: 有限的堆内存,原始只有16M

2:内存大小消耗等根据设备,操作系统等级,尺寸的不同而不同

3:程序不能直接控制

4:支持后台多任务处理

5:运行在虚拟机之上

 
5R

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Reduce(减少)

消耗更少的资源

 

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

回收资源

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。

 

 

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Reduce(减少)

消耗更少的资源

 

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

回收资源

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。
Reduce :

 

reduce 意思就是减少,直接减少内存的使用,是最有效的优化方法

Bitmap:

Bitmap 是内存消耗大户,绝大多数的OOM崩溃都是在操作Bitmap 时产生的下面看看几个处理图片的方法

图片显示:

我们需要根据需求去加载图片大小

例如在列表中仅用于预览时加载缩略图

只有当用户点击具体条目想看详细信息的时候,这时另启动一个fragement /activity 对话框等等,去显示整个图片

 

 

 

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Reduce(减少)

消耗更少的资源

 

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

回收资源

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。

 

图片大小:

直接使用ImageView显示bitmap会占用较多资源,特别是图片较大的时候,可能导致崩溃。
使用 BitmapFactory.Options设置inSampleSize, 这样做可以减少对系统资源的要求。
属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。

 

 

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Reduce(减少)

消耗更少的资源

 

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

回收资源

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。

 

图片像素:

Android中图片有四种属性,分别是:
ALPHA_8:每个像素占用1byte内存
ARGB_4444:每个像素占用2byte内存
ARGB_8888:每个像素占用4byte内存 (默认)
RGB_565:每个像素占用2byte内存

 

 

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Reduce(减少)

消耗更少的资源

 

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

回收资源

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。

 

图片回收:

使用Bitmap过后,就需要及时的调用 Bitmap.recycle()方法来释放Bitmap占用的内存空间,而不要等Android系统来进行释放。

下面是释放Bitmap的示例代码片段。

 

[java]  view plain copy print ?

  1. // 先判断是否已经回收
  2. if(bitmap != null && !bitmap.isRecycled()){
  3.     // 回收并且置为null
  4.     bitmap.recycle();
  5.     bitmap = null;
  6. }
  7. System.gc()

 

 

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Reduce(减少)

消耗更少的资源

 

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

回收资源

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。

 

到底什么时候使用软引用,什么时候使用弱引用呢?

个人认为,如果只是想避免OutOfMemory异常的发生,则可以使用软引用。如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。

还有就是可以根据对象是否经常使用来判断。如果该对象可能会经常使用的,就尽量用软引用。如果该对象不被使用的可能性更大些,就可以用弱引用。

另外,和弱引用功能类似的是WeakHashMap。WeakHashMap对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的回收,回收以后,其条目从映射中有效地移除。WeakHashMap使用ReferenceQueue实现的这种机制。

 

 

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Reduce(减少)

消耗更少的资源

 

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

回收资源

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。
http://blog.csdn.net/a396901990/article/details/38707007

1.Reckon(计算)

首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆

2.Reduce(减少)

消耗更少的资源

 

3.Reuse(重用)

当第一次使用完以后,尽量给其他的使用

5.Recycle(回收)

回收资源

4.Review(检查)

回顾检查你的程序,看看设计或代码有什么不合理的地方。

Tagged:

Comments are closed.