推荐一个靠谱的内存泄漏分享,感谢博主:https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650238704&idx=1&sn=ad334840afdc2d9bdb8215e9f942e54e&chksm=88639f9fbf1416898edfc3615a7ea25f6798e3bb6f3089ca720e18b92ce67328c623561cf35e&scene=0#rd
综合上述博主分享及结合自身实际开发中所遇到的泄漏,做个简单的解决思路总结:
关于App内存泄漏,相信多多少少都会遇到一些
关于排查泄漏不再赘述,相关工具可以使用MAT/LeakCanary,下面标出一些常见的注意点:
1.无论是单例还是常规引用,我们的Context用于都是第一位,只需记住无论何时,Context对象优先使用ApplicationContext,覆盖整个软件生命周期
2.Activity,对于那些必须使用Activity对象的引用,我们需要将Activity对象修改成软引用或弱引用,使用时首先判空
3.Handler,通常我们的Handler都是以内部类的形式创建,这个时候我们需要将其修改为静态内部类,同时弱引用;销毁时清空消息队列,使用handler.removeMessageAndCallback(null)
4.Bitmap,Bitmap.recycle(),bitmap=null;同时使用弱引用
5.WebView ,调用销毁方法,清除JavaScript对象,WebView.removeAllViews(),WebView.destory();
6.List,销毁时调用List.clear(),清空,list= null
7.网络及文件流对象已经数据库Cursor的使用完关闭,这个是最基本的点,不再多说
以上为一些个人开发中最常见引用就方案,经过排查实战已见效果。在我们做内存优化时,时刻关注这几个点,我们的泄漏就会减少很多
ps:平时多看看靠谱的技术分享,自己再去实践验证,印象深刻,刻在自己的脑子里