静态内部类非静态内部类的区别(Handler 引起的内存泄漏。)
静态集合类引起内存泄露
单例模式引起的内存泄漏。
**解决:**Context是ApplicationContext
,由于ApplicationContext
的生命周期是和app一致的,不会导致内存泄漏
注册/反注册未成对使用引起的内存泄漏。
集合对象没有及时清理引起的内存泄漏。通常会把一些对象装入到集合中,当不使用的时候一定要记得及时清理集合,让相关对象不再被引用。
减少内存对象的占用
-
ArrayMap/SparseArray
代替hashmap
-
避免在android里面使用
Enum
-
减少bitmap的内存占用
-
inSampleSize
:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。 -
decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。
-
减少资源图片的大小,过大的图片可以考虑分段加载
2、理解Activity,View,Window三者关系
这个问题真的很不好回答。所以这里先来个算是比较恰当的比喻来形容下它们的关系吧。Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater
像剪刀,Xml
配置像窗花图纸。
-
Activity构造的时候会初始化一个Window,准确的说是
PhoneWindow
。 -
这个
PhoneWindow
有一个“ViewRoot
”,这个“ViewRoot
”是一个View或者说ViewGroup
,是最初始的根视图。 -
ViewRoot
通过addView
方法来一个个的添加View。比如TextView
,Button等 -
这些View的事件监听,是由
WindowManagerService
来接受消息,并且回调Activity函数。比如onClickListener
,onKeyDown
等。
3、Handler的原理
所以就有了handler,它的作用就是实现线程之间的通信。
handler整个流程中,主要有四个对象,handler
,Message
,MessageQueue
,Looper
。当应用创建的时候,就会在主线程中创建handler对象,
我们通过要传送的消息保存到Message中,handler通过调用sendMessage
方法将Message发送到MessageQueue
中,Looper
对象就会不断的调用loop()方法
不断的从MessageQueue
中取出Message交给handler进行处理。从而实现线程之间的通信。
4、View,ViewGroup事件分发
- Touch事件分发中只有两个主角:
ViewGroup
和View
。ViewGroup
包含onInterceptTouchEvent
、dispatchTouchEvent
、onTouchEvent
三个相关事件。View包含dispatchTouchEvent
、onTouchEvent
两个相关事件。其中ViewGroup
又继承于View。
2.ViewGroup
和View组成了一个树状结构,根节点为Activity内部包含的一个ViwGroup
。
3.触摸事件由Action_Down、Action_Move、Aciton_UP组成,其中一次完整的触摸事件中,Down和Up都只有一个,Move有若干个,可以为0个。
4.当Acitivty
接收到Touch事件时,将遍历子View进行Down事件的分发。ViewGroup
的遍历可以看成是递归的。分发的目的是为了找到真正要处理本次完整触摸事件的View,这个View会在onTouchuEvent
结果返回true。
5.当某个子View返回true时,会中止Down事件的分发,同时在ViewGroup
中记录该子View。接下去的Move和Up事件将由该子View直接进行处理。
由于子View是保存在ViewGroup
中的,多层ViewGroup
的节点结构时,上级ViewGroup
保存的会是真实处理事件的View所在的ViewGroup
对象:如ViewGroup0-ViewGroup1-TextView
的结构中,TextView
返回了true,它将被保存在ViewGroup1
中,而ViewGroup1
也会返回true,被保存在ViewGroup0
中。当Move和UP事件来时,会先从ViewGroup0
传递至ViewGroup1
,再由ViewGroup1
传递至TextView
。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
尾声
开发是需要一定的基础的,我是08年开始进入Android这行的,在这期间经历了Android的鼎盛时期,和所谓的Android”凉了“。中间当然也有着,不可说的心酸,看着身边朋友,同事一个个转前端,换行业,其实当时我的心也有过犹豫,但是我还是坚持下来了,这次的疫情就是一个好的机会,大浪淘沙,优胜劣汰。再等等,说不定下一个黄金浪潮就被你等到了。
这是我在这行工作10几年积累的一些资料,如果还想继续在这行业走下去的,或者现在打算跳槽,可以**私信【学习】**我愿意把资料免费分享给大家。
或者直接点击下面链接领取
Android学习PDF+架构视频+面试文档+源码笔记
- 330页 PDF Android核心笔记
- 几十套阿里 、字节跳动、腾讯、华为、美团等公司2020年的面试题
- PDF和思维脑图,包含知识脉络 + 诸多细节
- Android进阶系统学习视频
- PDF和思维脑图,包含知识脉络 + 诸多细节
[外链图片转存中…(img-rlH31JJz-1710694805300)]
- Android进阶系统学习视频