千万级用户的Android客户端是如何养成的

抖音、美团等大厂千万级用户的Android客户端架构演进之路— 在移动开发中,对开发者来说不同的人具有不同的能力。就像读一本书一样,一千个读者,有一千个哈姆雷特。但不管怎样,只要你是个软件开发者你就必须学习windows或Linux等操作系统的运行原理。Android是一个移动终端操作系统平台,在这个智能手机普及的时代,学习Android框架是非常重要。接下来笔者就抛砖引玉,希望这本书在您开发软件之路上帮到您。Android架构开发手册主要介绍Android框架的初始化过程及主要组件的工作原理。直接分析和整理了Android框架的主要源代码,并详细讲解了理解框架工作原理 阅读详情

Android客户端的架构不论如何演变,架构设计的出发点总是离不开两点,一是提高开发效率,二是降低维护成本。阿刘基于这两点,主要分享了in Android客户端的架构演变。以下是正文:

1.0 时代:小、快、灵
2014年6月份,in发布了第一个版本。到目前为止,已经经历了几十个版本的迭代。在1.0时代,APP的特点是小、快、灵。当时产品逻辑并不复杂,投入的资源不是特别多。因为处于探索期,所以产品的迭代非常快,为了与之适应,in采用了简单的单工程的形式组织整个产品结构,高结构的层次也只有几层,非常浅,如图1所示。

图片描述

图 1
为了兼容H5跳转,in参考了H5的一种路由协议作为跳转的支持。该时期,in的用户量增长迅速,1.0末期已经达到了近2500万。在这个框架下,in一直衍生到1.9版本,这段时期使用轻量结构比较适合小步快走,即迭代非常快的形式,但这种形式存在一个明显的缺点,即扩展性较差,个别类臃肿,不适合协同开发。随着业务逻辑愈发复杂,参与人员不断增加,如何提高协同开发效率成为当务之急。

2.0时代:繁、稳
in在2.0时代有三个亟需解决的问题:

产品逻辑日趋复杂。复杂表现在两方面:一是演进非常快;二是反复。这是最致命的,因为开发过程中PD可能会临时做一些需求上的变更。因此,此时的框架必须适应产品的复杂化;

代码复用性差。1.0时代,新模块的开发主要基于原有的模块,仅仅在原有的模块上做一个很小的改动,代码实现上却需要进行大幅度的调整;

业务逻辑与基础功能杂糅在一起。因为业务上的一些变更常常会触及底层的东西,导致稳定性不足。

图片描述

图 2
基于这三点,in在2.0时代进行了如图2所示的重构。

首先,将所有业务分成独立的模块,同时考虑产品逻辑中可能没有想到的模块。以in为例,in有图片详情页,但从产品逻辑看,产品分为个人中心、话题、品牌站等模块,这些模块都有各自的图片详情页,图片详情页并不是一个独立的业务线。初期,in严格按照产品线去划分业务逻辑模块,所以开发出好几套图片详情页,这就是代码复用性差。经验教训是,模块不应完全由PD决定,我们必须非常熟悉产品结构,清楚有没有共性的模块可以单独抽离出来。

其次,业务模块必须具有一定的配置性,即可扩展性。沿用刚才的例子,我们希望个人中心的图片详情页具有显示用户打上去的标签、贴纸等的功能,但品牌详情页可能并不需要这类功能,所以业务模块必须达到可配置。分好业务模块后,各个模块之间相互独立,但必然存在公共的功能,因此需要有一个底层的公共类库做支持。公共类库主要包括了一些基础功能,比如网络请求、图片解析、本地日志系统等。

最后,in引入了许多第三方功能,而公共模块是一个独立工程。in允许公共模块直接使用第三方库,但不允许其它模块单独使用。因此,第三方库达到统一管理。同时,in还沿用并强化了1.0时代的路由协议,推送可以通过这套协议跳转到推送页面。

到此,in基本解决了之前谈到的三个问题,更重要的是提高了QA测试效率。

以往需要等所有功能开发完成才能交付给QA,分模块后,每一个业务模块都可以不依赖其他模块独立运行。当一个模块自己的业务开发完成后,都可直接交付给QA。但与此同时,产品又产生了新的问题,即公共类库臃肿,难维护,迁移成本高。

2.0时代,in的用户量从1.0时代的近2500万增长到7000万。in意识到每一次小的更新都会影响用户的体验,因此告别了原先快速迭代的发展模式,转为求稳。从开发的角度来说,是要提供更优质的服务。

后2.0时代:精、稳
图片描述

图 3
针对2.0时代产品公共类库臃肿的问题,in在框架上做了如图3所示的改进。首先,上层沿用2.0时代的形式,但对公共模块进行拆分,将公共业务抽成代理层,并且引入服务化的概念,将每一个机组功能都抽成独立的服务,比如网络请求、图片上传,本地日志等。这一版改进后,服务都被独立抽出,相互之间是隔离的,每个服务都可以交由不同的人去维护,内部高类聚。

与此同时,每个服务都需要有容错性,每个模块都需要有兜底方案,保证自己的输出是稳定的,自己内部的问题不会影响其他服务。

另外,底层服务很少被上层的业务代码入侵,可尽量通过协议或者是API的形式支持上层的业务逻辑,做到最轻量化级的接入。in还对第三方库做了封装,将其通过代理的模式与自己的业务代码隔离,这样就可以灵活地替换第三方类库,并且大大降低维护成本。

服务化过程中,in沿用了之前的通信模块,并且加入了一个统计框架。这个框架着重突出了服务化的概念,并且是本地服务化。它的优势在于非常的独立,且具有很高的扩展性,每加入一个新的服务,都不会影响到其他的服务,并且在整个架构的层面上来讲,每一个服务之间相互依赖的关系、调用的顺序都可以很快地整理出来。同时,它还给in的产品矩阵打下了一个很好的基础,未来如果推出一些新的APP,需要引用in老的代码时,只需要选择需要接入的那些服务,就能很快理出新的APP的架构图,并且配置起来。

Extra:巧、宜
图片描述

图 4
图4为in内统计框架,最大的特点是自动化、无侵入式。业界很多统计框架在路径统计层面,主要是统计Activity层以及Fragment层,但是in的很多页面是通过View等其他形式实现的,因此无法通过现有的一些统计框架进行页面统计。对此,in把所有的页面都抽成layer的抽象概念,把所有的layer通过用户的行为路径压到一个layer栈内,最终以一个列表的形式发到服务器,然后在服务器建立一个数据仓库,再通过BI部门整理数据仓库得出每个用户的实际浏览路径,包括每个页面的留存等。

模块内的解耦

图片描述

图 5
耦合存在每个模块内。业界很常见的是用MVC、MVP等模式进行一定的解耦,in主要用MVP模式。为什么in之前Activity常常写得特别臃肿?因为它不仅做了Model层的事,而且做了表现以及控制上的事。解决办法是把View层单独抽离,由Fragment去做View层的展现,而Activity层只专注于对数据的处理,实现View层跟Model层之间不直接交互,而是通过一个接口的形式进行沟通。

灰度发布机制

灰度发布机制主要是为了支持产品的A/B Test。in的产品越来越复杂,用户量越来越多,为了实验性的功能不影响所有的用户体验,只能允许一部分特定用户看到新功能,而这需要通过代码层做控制,即灰度发布机制。如图5所示,灰度发布主要在业务层之上,它的配置全部由服务器端决定,确保每个业务都可以做到灰度发布。

模块间通信

模块增加后,模块间通信成为一个大问题,因为模块之间是不可见的。两个解决办法:第一是通过一套反射机制达到每个模块间相对可见;第二是建立一套自己的基于观察者、订阅者模式的消息分发机制,in的这套机制主要参考了EventBus以及谷歌最近开源的一个安卓响应式框架Agera类似于RxAndroid,这个框架能帮助模块间通信的现成模型的构建。另外,模块间通信有一个Sticky机制,问题就在于当页面未打开之前,数据已经先到了,那么该如何解决?就是通过Sticky机制,它能确保数据先到,页面再打开的时候,数据能顺利下发。

总结
每一套框架都有自己的特点,但是万变不离其宗,最主要的是要适合当前的项目规模和体量,更好的与业务结合在一起,提高开发效率,降低维护成本。

转自:http://geek.youkuaiyun.com/news/detail/98761

Android DevCamp幻灯片分享:千万级并发在线推送系统架构解析 | 个信互动 叶新江 再谈Android推送实现:《千万级并发在线推送系统架构解析》| 个信互动 叶新江 | Android DevCamp 主题简介: 移动短消息是大家所熟知的一种信息推送方式, 基于信令通道的推送在简单信息的体验方面已经被大家所接受。 在目前移动互联网方面,简单的文字推送已经不够满足需要。这也是移动互联网背景下推送系统的发展的机遇。 本主题就千万级并发在线推送系统如何在低成本下,保证推送的时效性、有效性、内容形式的多样性、以及省电省流量等方面进行一个解析和分享。 讲师信息:叶新江,个信互动(北京)网络科技有限公司 高级副总裁,负责公司研发及工程实施,资深高并发分布式系统架构师。曾任 Microsoft MS中国首席架构师,爱立信广州研发中心(Ericsson CGC)高级系统架构师,卓望数码移动梦网研发主管。并有多年银行金融的技术管理经历。 立即下载

相关推荐

基于stm32开发的红外循迹小车

2.L298N电机驱动模块:分别是5V,12V,GND,可以通过外加电源给驱动模块供电,IN1,IN2,IN3,IN4,EN1,EN2,通过给IN口不同的电平,可以达到控制电机正反转,EN口为使能口,可以通过给EN口不同的PWM波,来达到控制小车速度,1.红外循迹模块:检测黑线的原理是向外发射红外线,当没有遇到黑线的时候,返回回来,之后返回高电平,当遇到黑线的时候,红外被吸收,返回高电平,读取相应IO口的电平就可以知道小车此时的大致位置;模块有四个输入接口,分别连接四个TT马达,驱动小车运动;

2301_81374681的博客 1万+

linux面试问题汇总_2024linux运维面试题,2024年最新2024软件测试面试心得

83 | 千万级的用户,提供一个服务,该服务有很多模块,现在有一个底层模块需要优化,问怎么实现,在不影响其他服务模块以及用户体验的情况下。(面IEG) | || 151 | 各种排序:冒泡、选择、插入、希尔、归并、快排、堆排、桶排、基数的原理、平均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。| 79 | 指定一个数组,求2个数的和等于指定的和(某一个数),如果是3,4,5,n个等于个的和(某一个数)呢?| 58 | vector与list的区别,map是如何实现的,查找效率是多少 | |

2401_84247726的博客 877

Android perfetto 简介

android linux 性能优化 原理及操作

求变,从思想开始 3481

再谈Android推动:《千万级并发在线推送系统架构解析》| 个信互动 叶新江 | Android DevCamp...

再谈Android推动:《千万级并发在线推送系统架构解析》| 个信互动叶新江| Android DevCamp 主题简介: 移动短消息是大家所熟知的一种信息推送方式, 基于信令通道的推送在简单信息的体验方面已经被大家所接受。 在目前移动互联网方面,简单的文字推送已经不够满足需要。这也是移动互联网背景下推送系统的发展的机遇。 本主题就千万级并发在线推送系统如何在低成本下,保证推送的时效性、有效...

fuerbosi 502

ExpressLRS 915MHz vs 2.4GHz:实测对比与TX12遥控器的最佳搭配方案

本文深入对比了ExpressLRS 915MHz与2.4GHz两种频段在穿透能力、延迟、抗干扰等方面的实测表现,并结合RadioMaster TX12遥控器的硬件特性,提供了从微型花飞到极限远航等不同场景下的最佳搭配方案与EdgeTX系统配置指南,帮助FPV玩家根据核心飞行需求做出精准选择。

milk8的博客 447

RealSense D455启动教程

RealSense D455启动教程 修改rs_camera.launch

每天进步一点点 2419

千万级用户的 Android 客户端是如何养成的

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33717298的博客 145

双目相机测距原理

普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下:如图所示,P点为相应的物体位置,CL和CR为左右相机光心位置,PL和PR分别为左相机和右相机拍摄的P点成像结果。f为相机焦距,Z为物体距相机的深度距离,b为左右相机基线距离根据几何关系有:则相应的深度信息计算公式为:(1)其中XL-XR为视差。其余在两侧的情况同样可以用几何关系分析得到该表达式(1),即对于普通双目相机测距可以直接通过公式(1)得到深度结果。

doudou2weiwei的博客 4548

(4.6.15)千万级用户的 Android 客户端是如何养成的

编者按:Android 客户端的架构不论如何演变,架构设计的出发点总是离不开两点,一是提高开发效率,二是降低维护成本。5 月 29 日下午,九言科技 in Android 客户端的负责人阿刘基于这两点,在七牛云举办的「架构师实践日」沙龙上,为大家带来了题为「in Android 客户端的架构演变」的分享。以下是对他演讲内容的整理。 1.0 时代:小、快、灵 2014 年 6

JAVA成长之路 603

创建XCP的CanApe工程

创建XCP的CanApe工程

weixin_44173919的博客 2891

Sigrity Power DC Resitance Network Model Generation模式生成电阻SPICE模型操作指导

Sigrity Power DC Resitance Network Model Generation模式是用于提取负载每个pin电阻SPICE模型的,结果以spice网表形式展现,仍然以Motherboard.spd为例进行说明。目的是模拟实际情况,via的孔壁电镀1mil,中间是空心的,让via不完全被填充金属成为实心via。Upper/lower Tolerance:上下公差,设置为5%,也就是压降允许的范围。P/F Mode:通过/失败模式,选择Worst,最差的情况。

weixin_54787054的博客 420

抖音、美团等大厂千万级用户的Android客户端架构演进之路——《Android架构开发手册》

笼统的说,比高级工程师技术面更广,学习主动性更强,更能紧跟时代发展的就是Android架构师。Android架构师技术深度和广度都要兼顾,也需要时间的积累和经验的沉淀。2、最主流的Android架构师技术体系详解在移动开发中,对开发者来说不同的人具有不同的能力。就像读一本书一样,一千个读者,有一千个哈姆雷特。但不管怎样,只要你是个软件开发者你就必须学习windows或Linux等操作系统的运行原理。Android是一个移动终端操作系统平台,在这个智能手机普及的时代,学习Android框架是非常重要。

2401_84123294的博客 765

手机直连低轨卫星通信:架构、关键技术和未来展望

【摘 要】借助低轨卫星星座全时全域覆盖优势,手机直连卫星通信预期成为6G重要特征之一。首先介绍了手机直连卫星的测试验证、标准化与商业项目发展现状。其次,介绍了基于透明转发、部分可再生处理、完全可再生处理、集成接入和回传的四种手机直连低轨卫星网络架构及组网方式。通过分析手机直连低轨卫星网络场景下高移动性与大传输时延等带来的接入与传输问题,提出对地面移动通信体制进行适应性改进的关键技术方案。最后,探讨了未来手机直连低轨卫星发展发向和潜在思路。通过上述阐述与分析,提供未来发展手机直连低轨卫星通信的可行路径。【关

fzq0625的博客 1709

良心巨作,阿里大佬全新开源《Android架构设计权威指南

这次面试问的还是还是有难度的,要求当场写代码并且运行,也是很考察面试者写代码因为Android知识体系比较庞大和复杂的,涉及到计算机知识领域的方方面面。在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

2401_84002482的博客 788

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

抖音、美团等大厂千万级用户的Android架构演进之路—,今年最新整理的《高频Android面试题集合》

2016.09.26,抖音版本 1.0.0 上线,随后不断迭代优化和丰富产品,截止目前,抖音日活跃用户突破 6 亿,短短 4 年间,抖音从零爆发性增长。想要了解它的架构演化请往下看。在我们探索解决两端代码复用的同时,业务的发展又对我们提出新的挑战。随着团队成员扩充了数倍,商超生鲜等垂直品类的拆分,以及异地研发团队的建立,外卖客户端的平台化被提上日程,想要解决外卖业务平台化的问题,又要解决外卖 App 和外卖频道两端代码复用的问题,下面为你解答。

2401_83620927的博客 898

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

抖音、美团等大厂千万级用户的Android架构演进之路——《Android架构开发手册》

前言 近几年,Android 开发的套路日趋成熟,越来越多的 Android 工程师获得了「高级」的称号,也有不少人在参与公司的 App 从无到有再到火爆的整个开发过程中,顺理成章地拿到了 Leader 职位。 1、什么是Android架构师? 笼统的说,比高级工程师技术面更广,学习主动性更强,更能紧跟时代发展的就是Android架构师。Android架构师技术深度和广度都要兼顾,也需要时间的积累和经验的沉淀。 2、最主流的Android架构师技术体系详解 在移动开发中,对开发者来说不同的人具有不同的能力.

datian1234的博客 2669

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

BATZ,一份《Android架构开发手册》就够,已offer,2020年安卓开发书籍推荐

这里我特地整理了一份《Android开发核心知识点笔记》,里面就包含了自定义View相关的内容除了这份笔记,还给大家分享Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~

2401_84149765的博客 451

2022企业级《Android架构开发学习手册》,安卓框架学习教材

上周我在各大技术社区发表了一篇《JetpackMVVM精讲》,原以为在唱衰安卓的2022会无人问津,没想到文章一经发布,从国内知名大厂的架构师、技术经理,到世界级公司的Android开发都在看。从读者的反馈来看,近期大部分安卓开发已跳出舒适圈,开始尝试认识和应用到实际的项目开发中。只可惜,关于Android架构方面的内容网上多是,这不仅不能提供完整的视角来帮助读者明确背景状况,更给还没入门Jetpack的读者。于是这一期,我们带着精心打磨的《》来了!...

Android23333的博客 439

通俗易懂的 Android 架构开发学习手册,安卓官方架构指南

AndroidBaseFrameMVVM是一个Android工程框架,所使用技术栈为:组件化、Kotlin、MVVM、Jetpack、Repository、Kotlin-Coroutine-Flow**,既可以是一个可以开箱即用的工程框架基础层,也是一个很好的学习资源。 但架构并非空穴来风,每一种设计都有其存在依据,如何为项目选择合适架构,也是 Android 开发工程师的常备课题。本文将为大家总结和陈述 Android 框架的初始化过程、主要组件工作原理及大厂架构的演化之路,帮助中高级的开发者

大模型学习路线 498

Android架构文章集合

安卓架构文章合集(a collection of android Architecture) fork from :https://github.com/Juude/Awesome-Android-Architecture!!! 博客原地址: 简书博客 github地址: AndroidArchitectureCollection github地址 请关注github

梦想 坚持 自由 1070

Android架构开发手册,带你直观了解Android系统架构

在深入学习一个事物之前,我们都需要先纵观全局,对整体框架有一个认知,才不至于迷茫无措。学习Android也是如此,我们需要了解并掌握Android系统架构的核心思想,以及各个模块在Android系统所处的地位与价值,才能全方位的深度剖析各个模块功能,成功入门。先来看一张Google官方提供的 Android 经典分层架构图:Android系统架构从下往上依次分为Linux内核、HAL、系统Native库和Android运行时环境、Java框架层以及应用层这5层架构,每一层都包含了大量的子模块或子系统。

嘴巴吃糖了 723

为什么大部分的Android开发成为不了架构师,2024年最新移动客户端开发前景

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。这里只是整理出来的部分面试题,后续会持续更新,希望通过这些高级面试题能够降低面试Android岗位的门槛,让更多的Android工程师理解Android系统,掌握Android系统。11.MVC框架-高级示例。14.MVC框架-异常处理。

m0_60452134的博客 894
上一篇: 一个千万量级的APP使用的一些第三方库
下一篇: 团队协作工具--worktile
Tectool
博客等级 码龄11年 11粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值