Android最全微信在Github开源了Hardcoder,对Android开发者有什么影响?,android ndk面试题

Android高级架构师

由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记。

  • 330页PDF Android学习核心笔记(内含上面8大板块)

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

  • Android BAT部分大厂面试题(有解析)

好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。

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

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

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

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

但这其中有个难点,厂商之所以选择一刀切这种暴力提频的方案,根本原因在于,作为手机,没有办法准确知道 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 推到了对立面。

结尾

我还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

image

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

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

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

n.net/topics/618156601)**

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

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值