内存泄露:
<strong>memory leak</strong>
<strong>是指程序在申请内存后,无法释放已申请的内存空间,一次<a data-cke-saved-href="https://www.baidu.com/s?wd=%E5%86%85%E5%AD%98%E6%B3%84%E9%9C%B2&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YYmHcznjDYm1P-mWfvnHb40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErjDznHfsPW01nHTdPHnYP1Tz" href="https://www.baidu.com/s?wd=%E5%86%85%E5%AD%98%E6%B3%84%E9%9C%B2&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YYmHcznjDYm1P-mWfvnHb40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErjDznHfsPW01nHTdPHnYP1Tz" class="baidu-highlight">内存泄露</a>危害可以忽略,但<a data-cke-saved-href="https://www.baidu.com/s?wd=%E5%86%85%E5%AD%98%E6%B3%84%E9%9C%B2&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YYmHcznjDYm1P-mWfvnHb40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErjDznHfsPW01nHTdPHnYP1Tz" href="https://www.baidu.com/s?wd=%E5%86%85%E5%AD%98%E6%B3%84%E9%9C%B2&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YYmHcznjDYm1P-mWfvnHb40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErjDznHfsPW01nHTdPHnYP1Tz" class="baidu-highlight">内存泄露</a>堆积后果很严重,无论多少内存,迟早会被占光。</strong>
1.将线程的内部类改为静态内部类.(非静态内部类会持有对外部类的引用,而静态内部类则不会).
包括及时释放资源,static,cursor,IO
2采用弱引用保存context引用(weakreference)
(关于内存泄露的检测,可以使用Android studio 自带的Profiler工具)
内存溢出:
out of memory
是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
1,图片过大导致 OOM :
对图片采用软引用,及时地进行 recyle()操作
SoftReference<Bitmap> bitmap = new SoftReference<Bitmap>(pBitmap);
if(bitmap != null){
if(bitmap.get() != null && !bitmap.get().isRecycled()){
bitmap.get().recycle();
bitmap = null;
}
}
2,横竖屏反复切换:
(1)除去xml文件中大的图片背景,设置改由Activity中加载.
(2)直 接 把 xml 配 置 文 件 加 载 成 view 再 放 到 一 个 容 器 里 , 然 后 直 接 调 用this.setContentView(View view);方法,避免 xml 的重复加载。
3、 在页面切换时尽可能少地重复使用一些代码
比如:重复调用数据库,反复使用某些对象等等......
常见的内存使用不当的情况
4,在构建adapter时没有使用convertView.
5,Bitmap使用时没有及时使用recycle释放内存.(不是必须,看内存情况)