重学安卓:Activity 的快乐你不懂!

这块板砖的主人不仅想要渲染 UI,还想要窗口,于是在应用框架层,通过 Java 封装了我。

人如其名,我就是一个窗口,我负责可视化内容的排版,然后将排版结果,通过我的上司 WindowManager,通过进程通信的方式,去与后台服务 WindowManagerService 通信,最终递交到 Surface Flinger 来输出和呈现。

Surface Flinger 为我们每一个 Window 都映射了一块 Surface,来用于管理和渲染屏幕内容。

然而作为一个 Window,我也有我的苦衷。

我是一个会套娃的 View

主人因为经常听 Window 大哥抱怨排版的负担太重,于是用组合模式封装了我。我的 “有容乃大” 版本:ViewGroup,因为组合模式,而能够在自身内部存在更多的 View 或 ViewGroup,这使得我们从结构上来看,就像套娃。

托递归的福,我们的排版工作:Measure、Layout、Draw,可以自己通过如此般的递归,自下往上地完成。然后 Window 大哥就可以直接拿着我们的排版结果,去向上司交差啦。

…… 所以,Window 成了摸鱼般的存在吗?

本来 Window 正寻思着,日子过得这般清闲自在,没想到好日子到头 —— 主人不仅要一个窗口,还想要多窗口。这多窗口它就涉及到窗口间的切换、通信等等,甚是麻烦,这些脏活累活要是交给以后的开发者来干,那我不得留下一世骂名、遗臭万年??!

想到这里我就感觉哆嗦,不行,为了我一世英名,我得向主人进言。

其实早在 20000 多年前,女娲造人的时候,便采用了神级的模板方法模式,将一系列的通用功能都封装好,只暴露一些 DNA 接口,以供后来者随机输入和演变。

换言之,主人只需以模板方法模式的方式将我重新封装,并且编写一套管理窗口的任务和返回栈机制在背地里运筹帷幄,那么未来的开发者就只需继承我,而得到一个简练的配置模板,从而在模板上面输入他们的定制内容,以得到他们想要的结果。

于是我改名叫 Activity

Window 成了我永恒不变的信仰,存留在我的体内。对于开发者来说,我就是个待继承的 Activity,开发者通过继承我,拿到的就是一个个简练的模板。

对系统来说,我的本质仍是被管理的窗口,系统能够管理我和其他窗口的切换和通信。

对开发者来说,我的本质是视图控制器,开发者通过我可以控制 View 以他们想要的方式进行排版,并且在特殊状况下保存和恢复 View 的排版内容。

综上

最开始只有一块运行着原始 Android 系统的板砖。

Surface Flinger 的出现是为了更加方便地完成 UI 渲染。

Window 的出现是为了管理 UI 内容的排版。

Window 不堪重负于是将责任下发到 View 身上。

View 通过组合模式,在递归的帮助下蹭蹭蹭地完成排版工作。

Activity 的出现是为了满足多窗口管理和傻瓜式视图管理的需要。

所以 Activity 的知识边界无非就是生命周期、特殊状况导致的重建、多窗口跳转(启动模式、intent)、视图的加载和优化等等。
这样说,你理解了吗?

版权声明

本文以 CC 署名-非商业性使用-禁止演绎 4.0 国际协议 发行。
Copyright © 2019-present KunMinX

本文内容均属于作者 KunMinX 原创,转载须遵守上述协议,保证原文内容的完整、注明作者及出处。
任何个人或组织,未经作者本人沟通许可,不得将文中内容洗稿和用于写书、卖课等商业活动

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

一线互联网Android面试题含详解(初级到高级专题)

这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率

如果设置门槛,很多开发者朋友会因此错过这套高级架构资料,错过提升成为架构师的可能。这就失去了我们的初衷;让更多人都能通过高效高质量的学习,提升自己的技术和格局,升职加薪。

最后送给大家一句话,望共勉,永远不要放弃自己的梦想和追求;

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

自己的梦想和追求;

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值