总结android应用内存泄漏的问题,及需要注意的地方
来源:互联网 发布:json.stringify()使用 编辑:程序博客网 时间:2024/06/05 06:37
总结
主要原因:是当一个对象处于可以被回收状态时,却因为该对象被其他暂时不可被回收的对象持有引用,而导致不能被回收,如此一来,该对象所占用的内存被回收以作他用,这部分内存就算是被泄露掉了。简单来说,就是该丢掉的垃圾还占着有用的空间没有被及时丢掉
如果某些单例需要使用到Context对象,推荐使用Application的context,不要使用Activity的context,否则容易导致内存泄露。单例对象的生命周期和Application一致,这样Application和单例对象就一起销毁。
优先使用静态内部类而不是非静态的,因为非静态内部类持有外部类引用可能导致垃圾回收失败。如果你的静态内部类需要宿主Activity的引用来执行某些东西,你要将这个引用封装在一个WeakReference中,避免意外导致Activity泄露,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收 只被弱引用关联 的对象,只被 说明这个对象本身已经没有用处了。、
对了dialog的处理,dialog引起的内存泄漏主要是由于,dialog还在显示,但是宿主的activity已经被杀,导致dialog没有载体。解决的办法就是在ac被杀或者执行onpause函数时判断dialog不为null就关闭。在横竖屏切换时,因为会重走整个生命周期,所有也是内存泄漏的高发地。
Rxjava及eventBus等监听者模式,需要在ca销毁的时间取消订阅,也可以用Rxlifecycle绑定生命周期,一键解决内存泄漏
5.广播类导致的内存泄漏,注册广播之后需要反注册,不然会引发内存泄漏
6.handler,声明handler最好声明成静态内部类,同时持有外部Activity的弱引用。这样就不会出现ac已经死掉了,handler还在发送消息的情况,但是最好的操作是在ondetory是执行handler.removeCallbacksAndMessages(null);关闭所有的消息通知。
来源:https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650824585&idx=1&sn=c2d83d5877c5ab96c253cc191a922541&chksm=80b78b17b7c00201c75cae32aa84552e1526a2bd64c89b5a634246f21d41a62cdc5ee5b5822f&mpshare=1&scene=23&srcid=1124WWR4kmvIYW030E13Yfnp#rd
- 总结android应用内存泄漏的问题,及需要注意的地方
- android或 java内存泄漏需要注意的地方
- 注意内存泄漏的几个地方
- android 开发中需要注意内存泄露的地方
- Android 调用应用市场时需要注意的地方
- android应用中去掉标题栏需要注意的地方
- Android-屏幕适配需要注意的地方总结
- IOS 内存管理需要注意的地方
- GDI编程需要注意的地方(句柄泄漏)
- push notification需要注意的地方总结
- 线程相关及需要注意的地方
- 需要注意的地方
- 需要注意的地方
- 需要注意的地方
- android 混淆时需要注意的地方
- android自定义view需要注意的地方
- android手势监听需要注意的地方
- android studio快捷键需要注意的地方
- 免费Git服务器
- hdu 1525 Euclid's Game 博弈
- 一、实现欢迎界面和游戏背景图的滚动(雷霆战机)
- PAT
- 二、设计飞机类,实现键盘移动(雷霆战机)
- 总结android应用内存泄漏的问题,及需要注意的地方
- Android 7.0与6.0多语言效果对比以及遇到的坑
- 三、使用鼠标控制飞机,实现风骚走位(雷霆战机)
- 四、子弹类的创建,飞机子弹发射与无用子弹的销毁(雷霆战机)
- Zookeeper系列—Linux下的安装
- 六、爆炸效果的产生及销毁(雷霆战机)
- 数据结构算法和算法效率评价
- 七、完善:飞机生命值和子弹杀伤力(雷霆战机)
- 八、血条的制作和boss敌人的产生(雷霆战机)