Android Knowledge

一. 系统优化

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 集合对象没有及时清理引起的内存泄漏。

  • 通常会把一些对象装入到集合中,当不使用的时候一定要记得及时清理集合,让相关对象不再被引用。

你可能感兴趣的:(Android Knowledge)