Android内存泄漏优化


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之前需要先从父容器中将其移除,然后销毁

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容