Andorid

Android内存泄漏优化

2018-04-26  本文已影响5人  Chasing4phantom


1.单例模式导致泄漏

以Activity为例,启动一个Activity,并调用getInstance(Contextcontext)方法去获取AppSettings的单例,传入Activity.this作为context,这样AppSettings类的单例sInstance就持有了Activity的引用,当我们退出Activity时,该Activity就没有用了,但是因为sIntance作为静态单例(在应用程序的整个生命周期中存在)会继续持有这个Activity的引用,导致这个Activity对象无法被回收释放,这就造成了内存泄露。

使用全局context即可与单例生命周期长度相同,可避免内存泄漏

(使用application context即可)

2.静态变量导致泄漏

activity的静态成员生命周期比activity自身要长,当activity要退出后,静态成员若仍在引用,activity无法回收,造成泄露

减少静态变量的使用,或在合适时释放引用,避免泄漏

3.未取消注册或回调导致泄漏

注册的广播,在activity销毁时不取消注册,则会造成泄漏

startservice()同样

及时取消注册可避免泄漏

4.Timer和TimerTask造成泄漏

activity销毁时,timer可能还在继续执行timertask,无法回收activity的引用,造成泄漏

销毁activity时,及时cancle timer和timertask

5.资源未关闭或释放造成泄露

IO,File,Cursor,Sqlite的缓冲会造成泄漏,需要及时关闭

6.属性动画造成泄漏

销毁activity时要注意cancle掉属性动画(ObjectAnimator)

7.WebView造成泄露

销毁webview之前需要先从父容器中将其移除,然后销毁

上一篇下一篇

猜你喜欢

热点阅读