本文共 2097 字,大约阅读时间需要 6 分钟。
Android常用知识体系是什么鬼?所谓常用知识体系,就是指对项目中重复使用率较高的功能点进行梳理。注意哦,不是Android知识体系。
古语道:学而不思则罔,思而不学则殆。如果将做项目类比为“学”,那么整理就可以类比为“思”。
在做项目过程中总是会遇到使用相同的功能,比如toast、对话框、刷新加载列表、网络框架、数据库等等,一个简单的方法就是从之前的项目中复制粘贴到新项目中,然后做一些个性化修改,好了,这就“大功告成”了。当另外一个新项目用到了,再次复制粘贴。这样是不是很low。但是当项目一个接一个的时候,这个方法是一个简单快速的方法。
那么当几乎没有项目可做的时候或者当周末有时间的时候,我们是不是应该对功能点进行一下思考呢。那么思考什么呢?
1.思考这个功能点经过多个项目的“考验”,是不是“成年”了,可以“独立”出来了;
2.思考这个功能点是不是属于常用功能,值得“独立”出来;如果是的话,为什么不把这个功能点从项目中“独立”出来呢。有人会说,我记忆好,能知道所有项目中用到的功能点,我可以随时找到。是吗?我当下很怀疑啊。内存泄漏即 ML (Memory Leak)
指 程序在申请内存后,当该内存不需再使用 但 却无法被释放 & 归还给 程序的现象
内存泄漏的原因归根到底就是当需要被回收变量的内存被其他变量引用持有,导致内存回收失败
常见的原因有:
原因1:非静态内部类/匿名类 Handler
持有外部的Activity/Fragment
对象的引用,导致Activity/Fragemnt
被销毁的时候没有被回收
解决方案:
WeakReference
)持有Activity
引用(静态类默认不持有外部的引用)Activity/Fragment
)结束生命周期时,清空Handler队列原因2:非静态内部类的实例(对象)
= 静态实例
(其生命周期 = 应用的生命周期)
解决方案:
原因3:多线程 工作线程正在处理任务时外部类需要销毁,此时工作线程持有外部类的引用导致无法被回收
解决方案:
原因:集合类添加元素之后持有集合元素的引用,导致该集合元素不可被回收,导致内存泄漏
解决方案:
原因:资源对象使用后未关闭,在Activity/Fragemnt销毁时没有关闭/注销这些资源,将导致无法回收 例如:广播BraodcastReceiver
、文件流Fire
、图片资源Bitmap
、数据库游标
等
解决方案:
Activity
销毁时及时关闭/注销资源原因:Static关键字修饰成员变量的生命周期 = 应用的生命周期 例如 private static Context mContext = context
那么context上下文对应的Activity
则无法被回收
解决方案:
原因1:Context:当拥有Activity context
的引用的对象仍在使用,则该Activity
需要销毁时无法回收
解决方案:
context
的引用不要超过它的生命周期ApplicationContext
代替原因2:WebView:不再使用WebView对象后没有及时销毁,导致内存占用
解决方案:
WebView
对象进行销毁原因3:Adapter:滑动ListView、RecycleView获取新View时 都在getView()中重新实例化一个View对象,浪费资源,使内存占用越来越大
解决方案:
convertView
ViewHolder
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
文件夹有以下学习笔记,自行下载!
BAT大厂面试题、独家面试工具包,
资料免费领取,包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,
括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,[外链图片转存中…(img-WUh1KXYC-1615978044370)]
转载地址:http://aqati.baihongyu.com/