Android 内存优化
1 静态变量引起内存泄漏
静态变量的生命周期是从这个类被声明开始的,到这个类被垃圾回收器回收才会被销毁,所以,一般情况下,静态变量从所在的类被使用开始就要一直占用着内存空间,知道这个类结束.如果不注意,静态变量会占用大量内存的资源,造成垃圾回收器无法堆内存进行回收,造成内存浪费,
示例 1 定义一个Activity
Private static Resources mResources;
void onCrrate(Bundle state){
Super.onCreate(state);
mResources = this.getResources();
}
这段代码中,静态的mResoutces对象 拥有了当前activity对象的引用,activity又引用了整个页面中所有的对象,例如当横竖屏切换时,activity会重新创建,就会导致第一次创建的activity不能被垃圾回收器回收,导致内存的浪费
2 使用Application 的Context
在Android 中,Application Context 的生命周期和应用的生命周期一样长,如果想保持一个长期生命的对象,并且需要一个context,就可以使用Application对象,可以通过调用Context.getApplicationContext(),或Activity.getApplicaiton() 获取Applciation对象
上面示例 1的代码可以修改成下面这样
mResources = this.getApplcation().getResoutces(); 绕过activity
3 及时关闭资源
Cursor bitmap 等进行释放
4 对Adapter 进行优化
listview的adapter 中 getView 需要复用机制,
Recyclerview 中通过viewholder 进行了复用
4.1 Handler临时性内存泄漏
1 使用一个静态Handler内部类,然后对handler持有的对象使用弱引用,这样回收时,也可以回收Handler持有的对象
2 在