微信在Github开源了Hardcoder,对Android开发者有什么影响?(1)

本文介绍了微信的性能优化框架Hardcoder,它是一个让App主动告知系统需求的通信框架,帮助Android开发者提升App性能。文章探讨了Hardcoder的原理、对开发者的影响以及如何在面试中提及相关经验。
摘要由CSDN通过智能技术生成

今年一月微信公开课 Pro 2019 上,提到的微信性能优化框架「Hardcoder」,近日终于开源了。

微信开源的东西,作为 Android 开发,当然是双击 666 了。

但是作为一名 Android 开发者,我更关心的是 Handcoder 到底是什么?对我们 Android 开发者有什么影响?

什么是 Hardcoder?

Hardcoder 在 18 年微信就放出了消息,简单来说,Hardcoder 是微信研发的一款性能优化框架。

如果看了这么一句话,简单去理解的话,好像只要等微信开源之后,我们在 App 内也接入 Hardcoder,就可以如微信般丝滑。

但理想总是很丰满的…

Hardcoder 本身也是业务发展的产物,在微信越来越复杂后,常规的性能优化,带来的提升已经越来越小了。但是从厂商的角度,微信这种国民 App,就应该秒开无卡顿,做到极致的优化。

打个比方说,如果那个厂商的手机,被发现微信不好用了,用户肯定是觉得这个手机有问题,而不是微信有问题。

有句话怎么说的,「当你强大,整个世界都会对你和颜悦色」。

厂商也意识到了这一点,所以部分厂商早期是会针对微信,做一些小优化,其中比较典型的就是「暴力提频」。系统在识别当前微信正在运行,会粗暴的提高 CPU 频率,从而提升 App 的运行性能。

要知道,所有「一刀切」的事情,都是在暴露一些问题。

「暴力提频」也是一样。过多的提高 CPU 频率,必然会对手机的功耗造成影响,最直接的影响,就是你发现你的手机耗电更快了。

厂商对硬件资源的限制,本身有一部分,也是从功耗的角度考虑的,随着手机功能越来越丰富,其实电池技术是跟不上的,一款功能强大但离不开电源的手机,肯定不会是用户的理想选择。

所以手机厂商就会对硬件做出一些限制,在不需要那么多资源的时候,就减少资源的给予。但是资源的减少,必然会引起一些体验上的问题,例如卡顿,而这种用户体验的问题,厂商也并不愿意。

毕竟谁卡,谁不卡,用户心理自然有一杆秤。

但这其中有个难点,厂商之所以选择一刀切这种暴力提频的方案,根本原因在于,作为手机,没有办法准确知道 App 当前在干什么,是否需要资源。毕竟现在 App 的功能太丰富了,靠手机自身无法做到精准的优化。

既然厂商想优化体验,微信又有优化 App 性能的需求,那真是一拍即合,就诞生了 Hardcoder。Hardcoder 构建了 App 与系统(ROM)之间可靠的通信框架,让系统知道 App 的需求。

之前厂商也不知道什么时候该给资源,什么时候该省资源,真是又怕他不来又怕他乱来。

现在好了,有了 Hardcoder,既然系统不知道,就由 App 主动告诉它,等于微信主动告诉手机系统,我现在在什么场景下,或者我接下来要干什么了,这个场景需要一些系统资源来加持,才能保证速度嗖嗖的,不会卡顿。

到这里大家应该就理解了,Hardcoder 更像是一个通信框架,可以通过它告知操作系统,我接下来要做复杂操作了,请给我资源。

Hardcoder 本身与厂商,已经预设了一些场景值,可以直接使用。

int APP_SCENE_UNDEFINE = 0;                 //未定义场景
int APP_SCENE_STARTUP = 1;                  //进程启动,APP启动
int APP_SCENE_WINDOW_SWITCH = 2;            //UI页面切换(同一进程),activity,fragment切换
int APP_SCENE_WINDOW_SCROLL = 3;            //UI页面滑动
int APP_SCENE_DATA_LOADING_AND_PROCESS = 4; //数据加载和处理任务,指APP本地前后台任务
int APP_SCENE_MULTI_MEDIA_PROCESS = 5;      //多媒体相关业务
int APP_SCENE_COMMUNICATE = 6;              //APP/服务端通信
int APP_SCENE_SYSTEM_DEVICE = 7;            //调用系统服务

当然你也可以自行定义。

Hardcoder 的原理

知道了 Hardcoder 都干了什么,再简单了解一下它的设计。

Hardcoder 在 App 和系统之间,构建了一个可靠的通信框架,跳出之前 App 只能调用系统标准 API,而无法直接调用系统底层硬件资源的问题,让 Android App 与 系统之间,可以实现实时的通信。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

利用 Hardcoder,App 可以在必要的时候,向系统申请更多的硬件资源,例如 CPU 频率、大小核、GPU 频率等资源来提升 App 的性能。

Hardcoder 框架,分为 Client 端和 Server 端,本次开源的就是 Client 端,Server 端则交由厂商系统侧自行实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Hardcoder Client 端和 Server 端之间,采用的是 LocalSocket 的通信方式,等于 App 如果需要资源,通过 Hardcoder 的 Client 端向系统实现的 Server 发请求,系统侧接到请求之后,按需调整不同的系统资源,例如给更大的 CPU 频率,把系统绑定到大核运行等等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

说到 LocalSocket,我想 Android 开发应该比较熟悉。因为在 Java 层,Android 本身提供了一套 LocalSocket 的 API,但是呢 Hardcoder 没用它。因为 Hardcoder 主要是采用 Native 实现的,所以微信在 C 层,使用 Linux 的 Socket 接口,又自己实现了一套 LocalSocket。

这大概就是大佬的世界,用不了就自己写。

那利用 Hardcoder 到底对性能有多少提升呢?

最后

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

选定你想去的几家公司后,先去一些小的公司练练,学习下面试技巧,总结下,也算是熟悉下面试氛围,平时和同事或者产品PK时可以讲得头头是道,思路清晰至极,到了现场真的不一样,怎么描述你所做的一切,这绝对是个学术性问题!

面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。

金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值