Android开发高手课
张绍文
前微信高级工程师,Tinker负责人
立即订阅
12609 人已学习
课程目录
已完结 61 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 焦虑的移动开发者该如何破局?
免费
导读 (1讲)
导读 | 如何打造高质量的应用?
模块一 高质量开发 (25讲)
01 | 崩溃优化(上):关于“崩溃”那些事儿
02 | 崩溃优化(下):应用崩溃了,你应该如何去分析?
03 | 内存优化(上):4GB内存时代,再谈内存优化
04 | 内存优化(下):内存优化这件事,应该从哪里着手?
05 | 卡顿优化(上):你要掌握的卡顿分析方法
06 | 卡顿优化(下):如何监控应用卡顿?
06补充篇 | 卡顿优化:卡顿现场与卡顿分析
07 | 启动优化(上):从启动过程看启动速度优化
08 | 启动优化(下):优化启动速度的进阶方法
09 | I/O优化(上):开发工程师必备的I/O优化知识
10 | I/O优化(中):不同I/O方式的使用场景是什么?
11 | I/O优化(下):如何监控线上I/O操作?
12 | 存储优化(上):常见的数据存储方法有哪些?
13 | 存储优化(中):如何优化数据存储?
14 | 存储优化(下):数据库SQLite的使用和优化
15 | 网络优化(上):移动开发工程师必备的网络优化知识
16 | 网络优化(中):复杂多变的移动网络该如何优化?
17 | 网络优化(下):大数据下网络该如何监控?
18 | 耗电优化(上):从电量优化的演进看耗电分析
19 | 耗电优化(下):耗电的优化方法与线上监控
20 | UI 优化(上):UI 渲染的几个关键概念
21 | UI 优化(下):如何优化 UI 渲染?
22 | 包体积优化(上):如何减少安装包大小?
23 | 包体积优化(下):资源优化的进阶实践
24 | 想成为Android高手,你需要先搞定这三个问题
模块二 高效开发 (9讲)
25 | 如何提升组织与个人的研发效能?
26 | 关于编译,你需要了解什么?
27 | 编译插桩的三种方法:AspectJ、ASM、ReDex
28 | 大数据与AI,如何高效地测试?
29 | 从每月到每天,如何给版本发布提速?
30 | 数据评估(上):如何实现高可用的上报组件?
31 | 数据评估(下):什么是大数据平台?
32 | 线上疑难问题该如何排查和跟踪?
33 | 做一名有高度的移动开发工程师
模块三 架构演进 (9讲)
34 | 聊聊重构:优秀的架构都是演进而来的
35 | Native Hook 技术,天使还是魔鬼?
36 | 跨平台开发的现状与应用
37 | 移动开发新大陆:工作三年半,移动开发转型手游开发
38 | 移动开发新大陆:Android音视频开发
39 | 移动开发新大陆: 边缘智能计算的趋势
40 | 动态化实践,如何选择适合自己的方案?
41 | 聊聊Flutter,面对层出不穷的新技术该如何跟进?
42 | Android开发高手课学习心得
练习Sample跑起来 (8讲)
练习Sample跑起来 | 热点问题答疑第1期
练习Sample跑起来 | 热点问题答疑第2期
练习Sample跑起来 | 热点问题答疑第3期
练习Sample跑起来 | 热点问题答疑第4期
练习Sample跑起来 | ASM插桩强化练习
练习Sample跑起来 | 唯鹿同学的练习手记 第1辑
练习Sample跑起来 | 唯鹿同学的练习手记 第2辑
练习Sample跑起来 | 唯鹿同学的练习手记 第3辑
特别放送 (7讲)
Android JVM TI机制详解(内含福利彩蛋)
专栏学得苦?可能是方法没找对
专栏学得苦?可能你还需要一份配套学习书单
Native下如何获取调用栈?
聊聊Framework的学习方法
Android工程师的“面试指南”
程序员修炼之路 | 设计能力的提升途径
结束语 (1讲)
结束语 | 移动开发的今天和明天
Android开发高手课
登录|注册

34 | 聊聊重构:优秀的架构都是演进而来的

张绍文 2019-03-21
每个程序员心中都有一个成为架构师的梦想,那成为架构师这个目标是否“遥不可及”呢?从我的工作经历来看,我一共负责过搜狗输入法、微信等 4 款亿级产品的架构工作,可能有同学会好奇这些大型的 App 是如何做架构设计的。从我接手的这些应用的现实情况来看,看似光鲜的外表下都有一颗千疮百孔的心:各种日志随便输出、单例满天飞、生命周期混乱、线程乱创建、线程不安全这些问题随处可见。
所以你可以看到每个大型应用都背负着沉重的历史技术债务,架构师很重要的一项工作就是重构“老态龙钟”的陈旧架构。在接下来的“架构演进”模块中,我们一起学习架构该如何的重构和演进,帮助我们及时偿还这些“历史债务”。
虽然我们天天都在谈“架构”,那你有没有想过究竟什么是架构呢?

什么是架构

什么是架构,每个人都有自己的看法。在我看来,所谓的架构就是面对业务需求场景给出合适的解决方案,使业务能够快速迭代,从而达到“提质增效”的目标。
我先举个例子,告诉你什么是架构,以及架构的作用。我曾经为了解决 UI 渲染卡顿这个需求场景,我们设计了异步创建 View、异步布局与主线程渲染这个架构。不过架构只是设计的抽象,对于具体的实现,我们可以称之为框架。好的框架可以隐藏大家不需要关心的部分,提升我们的效率。例如 Facebook 的 Litho、微信的Vending,它们通过框架约束和异步来解决 Android 应用 UI 线程卡顿问题。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Android开发高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(12)

  • 大土豆
    逆向微信的过程中,发现微信很多架构都看得到历史变迁,比如说微信加密的主库中,几十张表,表名和字段名都命名有大小写驼峰,有小写下划线。微信App内部的私有协议中,有纯二进制协议,有二进制和文本混合(朋友圈snsinfo表的blob类型的字段),有纯文本协议的,纯文本的又有json的,有xml的,还有用冒号隔开内容的自定义格式的。

    作者回复: 微信数据表初期的设计的确有那么一些问题,但是考虑到迁移的成本太高,所以一直都没有彻底去搞

    2019-03-21
    7
  • OF
    这大土豆可真行。。。
    2019-09-02
    2
  • neo
    但是在最终产物上,组件化已经回归模块化…能举例说明下什么样算回归模块化,另外组件化会有什么问题?烦请有空解答下
    2019-07-10
    2
  • Andy
    记得自己15年刚入行的时候,小公司一个人负责Android客户端的开发,觉得把控项目的技术方案算是架构;后来去某直播平台上10+人的Android项目组觉得把写出优秀的框架也算架构;现在我我觉得架构真的像作者说的无处不在,一个小的需求,不同人的实现是可能有差别的,而且同一人在不同的环境和技术积淀下也会不同。所以,以求更好方为上策。

    作者回复: 是的,架构无处不在,每个人对架构的理解都可以不同

    2019-03-22
    2
  • 大土豆
    微信的db读写,不知道你们是怎么做的😄,我现在IM的架构是读写全在主线程(主线程io没有大家想象的这么可怕,只是数据量多的时候,还是会卡),我现在的想法是下个版本改成一个线程专门写,然后读可以多线程读

    作者回复: I/O都是不可预料的,数据库读写都不会在主线程,如果用户数据量大的情况会很慢的

    2019-03-21
    1
  • Akon Convict
    我一直认为架构是一个很抽象的话题,别人只能分享他们当时特定的困难下如何解决问题,从而演变出现在稳定高效的框架,我们能汲取的只是他们思考问题的方式,出现问题的根源是什么,有什么方式可以解决,这些解决方案中哪些是优秀的方案。

    作者回复: 每个人对架构都有不同的理解,但是架构核心也是为了解决质量和效率问题

    2019-03-21
    1
  • 问答
    高屋建瓴,很棒
    2019-03-21
    1
  • Dimple
    一个技术人应该有个代表作。目前为止,我的代表作就是在项目组长搭建的基础上,完成了我们现有系统的聊天大部分功能。

    这虽然不是自己独立做的,但也是和组长两个人的成果,而且最后效果比预期的好,接下来的目标就是,脱离组长,自己建立一个架构体系,加油
    2019-07-23
  • 1
    一个技术人的一生应该有个代表作,给自己的技术生涯一个交代。读后感觉醍醐灌顶。感谢绍文老师!
    2019-07-19
  • 邱逢生
    Github搜索不到vending?

    作者回复: 这个框架并没有开源

    2019-04-20
  • 落英坠露
    引进架构的目的是为了可维护、可扩展,不同的需求由不同的人做确实不一样。我的原则就是抽象、隔离有层次,按功能划分模块,然后使用合适的设计模式规划。
    2019-03-31
  • LD
    我现在去架构的理解就是整合好的第三方框架到项目,规范项目内框架的使用,codereiew避免垃圾代码进入。
    2019-03-22
收起评论
12
返回
顶部