深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- 将Handler类改为静态内部类 + 弱引用(
WeakReference
)持有Activity
引用(静态类默认不持有外部的引用) - 当外部类(一般是
Activity/Fragment
)结束生命周期时,清空Handler队列
- 原因2:
非静态内部类的实例(对象)
=静态实例
(其生命周期 = 应用的生命周期) - 解决方案:
- 将该类改为静态类(静态类默认不持有外部的引用)
- 将该类抽出来封装成为一个单例
- 原因3:多线程 工作线程正在处理任务时外部类需要销毁,此时工作线程持有外部类的引用导致无法被回收
- 解决方案:
- 将该线程类类改为静态类(静态类默认不持有外部的引用)
- 当外部类结束生命周期时强制结束线程
2.集合类
- 原因:集合类添加元素之后持有集合元素的引用,导致该集合元素不可被回收,导致内存泄漏
- 解决方案:
- 集合类使用完元素对象后,必须将该元素从集合中删除(由于一个集合中有多个元素,所以最简单的方案就是清空集合对象(clean)&设置为Null)
3.资源对象使用后未关闭
- 原因:资源对象使用后未关闭,在Activity/Fragemnt销毁时没有关闭/注销这些资源,将导致无法回收 例如:
广播BraodcastReceiver
、文件流Fire
、图片资源Bitmap
、数据库游标
等 - 解决方案:
Activity
销毁时及时关闭/注销资源
4.Static关键字修饰成员变量
- 原因:Static关键字修饰成员变量的生命周期 = 应用的生命周期 例如
private static Context mContext = context
那么context上下文对应的Activity
则无法被回收 - 解决方案:
- 尽量不要使用Static成员变量引用,使用弱引用代替强引用
- 使用单例模式
4.其他使用
- 原因1:Context:当拥有
Activity context
的引用的对象仍在使用,则该Activity
需要销毁时无法回收 - 解决方案:
- 对
context
的引用不要超过它的生命周期 - 使用
ApplicationContext
代替
- 原因2:WebView:不再使用WebView对象后没有及时销毁,导致内存占用
- 解决方案:
- 通过多线程对不再使用的
WebView
对象进行销毁
- 原因3:Adapter:滑动ListView、RecycleView获取新View时 都在getView()中重新实例化一个View对象,浪费资源,使内存占用越来越大
- 解决方案:
- 使用缓存的
convertView
- 直接使用
ViewHolder
总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
且后续会持续更新**