一. 系统优化
1.1 内存泄漏优化
1.1.1 静态变量导致内存泄漏
- public static Context mContext;
- 解决:a. 使用Application的Context。b. 慎用static关键字
1.1.2 单例模式导致内存的泄漏
- 单例模式的特点就是它的生命周期和Application一样,那么如果某个Activity实例被一个单例所持有,也就是说在单例里面引用了它,那么就会造成Activity对象无法正常回收释放。
- 解决:尽量的使用Application的全局Context。
1.2.3 属性动画导致的内存泄漏
- 从Android3.0开始,Google提供了属性动画,属性动画中有一类无限循环的动画,如果在Activity中播放此类动画并且在onDestroy()方法中没有停止该动画,那么动画会一直循环下去,尽管在界面上已经无法看不到动画了,但这个时候Activity的View会被动画持有,而View又持有Activity,最终Activity无法释放。
- 解决:在当前Activity的onDestroy()方法中取消动画:animator.cancel()。
1.1.4 Handler 引起的内存泄漏。
- 解决:将Handler声明为静态内部类,就不会持有外部类SecondActivity的引用,其生命周期就和外部类无关,如果Handler里面需要context的话,可以通过弱引用方式引用外部类。
1.1.5 注册/反注册未成对使用引起的内存泄漏。
- 注册广播接受器、EventBus等.
- 解绑
1.1.6 非静态内部类创建静态实例引起的内存泄漏。
- 解决:把内部类修改为静态的就可以避免内存泄漏了。
1.1.7 非静态匿名内部类引起的内存泄漏。
- 解决:将匿名内部类设置为静态的。
1.1.8 资源对象没有关闭引起的内存泄漏。
- 解决:在这些资源不使用的时候,记得调用相应的类似close()、destroy()、recycler()、release()等方法释放。
1.1.9 集合对象没有及时清理引起的内存泄漏。
- 通常会把一些对象装入到集合中,当不使用的时候一定要记得及时清理集合,让相关对象不再被引用。
网友评论