造成内存泄漏原因:
场景一:静态变量导致的内存泄漏
例如:mainactivity中
private static context scontext;
@override
protected void oncreat(bundle savedinstancestate){
.............................................
scontext=this;
}
泄漏点:静态变量scontext引用,activity无法正常销毁
场景二:单例模式导致的内存泄漏
存在一个testmanager类,可以接收外部的注册并将外部的监听器存储起来;接着让activity实现一个ondatalistener接口并向testmanager注册监听,由于过程中缺少解注册的操作引起内存泄漏,原因activity的对象被单例模式的testmanager持有,单例模式特点是其生命周期和application保持一致,因此activity对象无法被及时释放
场景三:属性动画导致的内存泄漏
如果在activity中播放动画没有在ondestroy中去停止动画,那么动画会一直播放,尽管界面没有动画效果,并且这个时候的activity的view会被动画持有,导致activity无法释放,解决方案:在activity的ondestroy中调用animator.cancel()停止动画
Android Studio的界面 原生内存监测
一般情况下,高密度的手机,一个页面大概就会消耗20M内存,如果发现退出界面,程序内存迟迟不降低的话,可能就发生了严重的内存泄露。
我们可以反复进入该界面,然后点击dump java heap 这个按钮,然后Android Studio就开始干活了,下面的图就是正在dump