覆盖4.6亿+设备量!腾讯开源的Hardcoder框架是如何提升Android APP性能的?

2019 年 10 月 30 日

覆盖4.6亿+设备量!腾讯开源的Hardcoder框架是如何提升Android APP性能的?

Hardcoder 的诞生


随着微信越来越复杂,性能优化变得越来越难做,优化所带来的效果提升也越来越不明显。所以我们一直在思考,该如何突破这个优化的极限?


直到有一次与厂商的交流我们了解到,部分厂商会针对微信做一些小改动,其中比较典型的就是“暴力提频”。系统在识别到微信启动,页面切换等场景时,会粗暴地提高 CPU 频率,从而提升 APP 运行的性能。


但由于厂商无法准确判断微信场景,暴力提频效果并不理想;而如果过多地提高 CPU 频率,又对手机的功耗有影响。这一方案启发了我们,我们何不跳出软件的范畴,在手机硬件的层面上挖掘更多的性能优化空间呢?于是 Hardcoder 框架应运而生。


Hardcoder 是什么?


厂商暴力提频效果不理想是由于在目前 Android 框架下,手机没有办法准确获知 APP 需要资源的时机。如果我们需要挖掘手机硬件层面的性能优化,就需要跳过 Android 操作系统的应用框架,在应用开发者和硬件之间打开一个通道,让硬件可以直接根据应用开发者的需要进行资源的调度。


Hardcoder 构建了 APP 与系统(ROM)之间可靠的通信框架,突破了 APP 只能调用系统标准 API,无法直接调用系统底层硬件资源的问题,让 Android APP 和系统能实时通信。



利用 Hardcoder,APP 能充分调度系统资源如 CPU 频率,大小核,GPU 频率等来提升 APP 性能,系统能够从 APP 侧获取更多信息以便更合理提供各项系统资源。同时,对于 Android 缺乏标准接口实现的功能,APP 和系统间也可以通过该框架实现机型适配和功能拓展。


Hardcoder 框架通信流程


Hardcoder 框架分为 Server 端和 Client 端。其中 Server 端在厂商系统侧实现,Client 端以 aar 形式合入到 APP 中。



APP 在需要资源的时候,向 Hardcoder 的 Client 端发出请求。Hardcoder Client 端接收到请求后向 Hardcoder Server 端发出请求。Server 端接受到请求后会根据请求参数向硬件申请不同的资源,比如调整 CPU 频率,把线程绑定到大核运行等,实现了 APP 到系统的通信。


同时系统也可把当前系统的状态通过 Hardcoder Client 在 Server 端注册的接口回调通知到 Client 端,从而 APP 可以获取到系统状态,实现系统到 APP 的通信。


Hardcoder Client 端与 Server 端采用的是 LocalSocket 的通信方式,由于 Hardcoder 采用 Native 实现,因而在 C 层使用 Linux 的 socket 接口实现了一套 LocalSocket 机制作为 Client 端与 Server 端之间的通信方式。



Hardcoder 通信框架特点


  • 系统服务为 optional,实现上可以完全支持或者部分支持

  • 框架实现不依赖于特定 Android 系统,如 API level 限制

  • APP 的功能和业务特性不依赖于该框架


Hardcoder 适用场景


Hardcoder 框架有效提升了微信启动、发送视频、小程序启动等重度场景的速度,朋友圈的滑动流畅性也明显提升,平均优化效果达 10%-30%。


此外,由于微信作为主动请求方可以在场景资源把控上做得更精细和准确,Hardcoder 在性能得到提升的同时仅增加了 2% 的电量消耗,相当于用 2% 的功耗换取平均 20% 的性能提升。


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


Hardcoder 开源


从微信技术开放共享的理念出发,我们在腾讯内部进行了 Hardcoder 框架的宣传和推广,包括手机 QQ、企业微信,天天快报等多个应用团队接入。其中手机 QQ 接入 Hardcoder 后,在启动、打开聊天界面、发送图片等场景的平均优化效果达 10%~50%。


腾讯现将 Hardcoder 框架开源,让更多 Android 开发者享受到 Hardcoder 框架的价值,解决大家在性能优化和机型适配上的烦恼。


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/k9M96Bktk7Hf29lmosxtnQ


2019 年 10 月 30 日 15:13615

评论

发布
暂无评论
发现更多内容

架构师第一期作业(第一周)

Cheer

课程练习

食堂就餐卡系统设计

星辰大海

学习

食堂就餐卡系统设计

钟杰

极客大学架构师训练营

架构一期第一周作业

Airs

课程作业

食堂就餐卡系统设计

orchid9

80%的程序员忽略的那些事-架构师是干什么的

郎哲158

学习 程序员 工程师 架构师 极客大学架构师训练营

第一周总结

fmouse

极客大学架构师训练营

架构师训练营-作业-第一周

Max2@12

极客大学架构师训练营

架构师第一期作业

happy

食堂就餐卡系统UML图

Jacky.Chen

架构师培训第一节课学习总结

happy

UML案例--食堂就餐卡系统设计

魏小龙

UML

第一周作业

Geek_ac4080

架构师训练营第 1 期 命题作业

张建亮

目标:创业团队组织搭建的内在逻辑

boshi

创业 团队组织

第一周学习总结

Croesus

架构师训练营第 1 期 第一周总结

张建亮

极客时间架构师训练营第一周学习总结

Jacky.Chen

架构师训练营 Week1 - 食堂就餐卡系统设计

极客大学架构师训练营

80% 的程序员忽略的那些事 - 架构师常干的那些事

郎哲158

学习 极客大学架构师训练营

就餐卡系统设计-UML图

scorpion

架构师学习课程第一周学习总结

orchid9

第一周学习总节

兵长

食堂就餐卡系统设计

fmouse

架構師訓練營第 1 期 - 第 01 周作業

Panda

系统用例图,组件图,组件时序图,部署图

Croesus

第一周-学习总结

Yangjing

极客大学架构师训练营

第一周学习心得

星辰大海

食堂就餐卡系统设计

Yangjing

极客大学架构师训练营

店长:是新零售系统落地的核心环节

boshi

数字化 标准化 新零售

第一周作业二:学习总结

登顶计划

覆盖4.6亿+设备量!腾讯开源的Hardcoder框架是如何提升Android APP性能的?-InfoQ