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

「暴力提频」也是一样。过多的提高 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 到底对性能有多少提升呢?

从官方里给出的数据来看,平均优化效果达 10%~30%,而又因为微信本身对资源的申请也比较精细和准确,所以功耗上仅增加了 2% 的耗电,相当于用 2% 的功耗,换来了 20% 性能的提升。这份数据在厂商来看,应该是可以接受的。

Hardcoder 框架的覆盖的设备量也非常的大,目前已接入 OPPO、vivo、华为、小米、三星、魅族等主流手机厂商,覆盖 4.6 亿+ 设备量。

到这里大家应该都明白了。说白了 Hardcoder 就是一个 App 与系统的通信框架,之前说的性能优化框架,但实际上真正的起作用的逻辑,都在 Server 端。你想申请资源,你就用 Hardcoder 申请你的,系统给不给你,完全由系统侧自身决定。

普通开发者看 Hardcoder

体量决定了复杂度,再简单的技术,用在 10w 用户和用在 10 亿用户上,就是天差地别。

有些事情,微信能做到的,你就算拿到了微信的源码,你也做不到。主要还是因为微信这样的用户体量,让厂商一路给开绿灯。

从文档中了解到,Hardcoder 目前国内的主流厂商都已经支持了,并且有些已经开放出权限申请方式。

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

VIVO 这种商务渠道的申请,应该是比较困难的,但是自助注册的 OPPO 以及华为这种无需注册的,就可以用到 Hardcoder 了。

但 Hardcoder 本质上还是一个与系统通信的框架,至于系统是否响应你申请资源的请求,完全拒绝于系统侧自身的逻辑,你这个申请资源的消息发过去了,对方受不受理,就不是我们能决定的。

文档里也提到,Hardcoder Server 端也会对应用请求资源做一定的限制,例如当前 App 在前台或者在后台,就会有不同的处理逻辑。

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

站在微信的视角,Hardcoder 是性能优化框架,站在普通开发者的角度,它可能仅仅是一个通信框架,并且还是那种单向通信的框架,是否有作用,完全取决于厂商,这部分堪称是玄学。

可能你在 A 手机上不好使,换到 B 手机上就好使了,也可能你在测试机上有效,换到自用机上就无效了。

不过话说回来,提升用户体验一直也是厂商的目标,这和大部分 App 开发者的目标上一致的,所以长期来看 Hardcoder 还是有价值的。但在国内全家桶 App 的环境下,天然的让厂商不信任 App,将厂商与 App 推到了对立面。

但是如果厂商有一套标准的检验流程,可以检验出 App 开发者是否真的做到「诚实」,在需要的时候做到精确控制,只在需要的时候申请,不需要的时候不乱申请。就可以让 App 和厂商愉快的玩耍了。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

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

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

img

img

img

img

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

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

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

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节

整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。

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

点个关注转发,谢谢!祝大家都能得到自己心仪工作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值