新闻动态

您当前的位置: 首页 > 新闻动态 > 公司新闻

当手机厂商说安卓手机性能优化的时候,他们到底在做什么?

作者:佚名 发布时间:2024-04-29 03:46:34 浏览:

曾经世界上有两种手机,一种叫苹果手机,一种叫其他手机。由此产生了两种游戏玩家.....

安卓玩家:这游戏好卡,手机太垃圾带不起来!

iOS玩家:这游戏是真的垃圾!竟然卡了!

短短几年后,这种慢到令人发狂的安卓手机体验,已经像是上个时代的故事。如今高端旗舰安卓手机的体验与苹果之间的差距越来越小。那么问题来了,这些年安卓厂商从哪些方面进行了优化,提升了安卓系统的使用体验?

我只知道安卓能做到现在这样好,最重要的原因就是因为它开源

做的东西可多了好吧!你们不要觉得Android 给的 aosp 代码多 NB,很多基础的功能都没有,流畅是流畅了,用户体验就是一坨翔,尤其是安装了国内的应用之后。

我举几个手机厂商做优化的例子:

  1. 限制后台应用自启动。不做限制的话你后台那些全家桶应用你拉我我拉你,续航跟性能完全没得保证
  2. 限制应用开机自启。理由同上
  3. 做一些内存策略,减少低内存出现的概率。内存小的机器很容易出现低内存的情况,低内存就会导致卡顿,lmk 就会乱杀 app。
  4. 做一些游戏的调教。热门游戏的基础性能你得保证,fps不能太低,玩久了手机不能太热,玩一局不能太耗电
  5. 做一些策略相关的功能。主要是学习用户的使用习惯,找到用户的喜爱应用,预测启动应用,睡眠时间等等,根据这些做一些事情
  6. 持锁优化。应用非法持锁会导致手机无法休眠,从而造成待机耗电的情况出现。比如gps,你在导航的时候用gps没毛病,我都没用你你还在用gps,那就有问题了
  7. 应用启动速度优化。应用启动这个是硬指标了,不能比竞品机器慢,想方设法,无所不用其极
  8. 响应速度优化。给用户的反馈快速的进行响应总共不是一件坏事,比如亮灭屏,人脸识别,指纹解锁,点击反馈,界面跳转等
  9. 广播优化,比如区分前后台广播队列,合并或减少广播等
  10. io 优化,比如前后台 io 做区分,优化调度优化算法,优化优化缓存策略等
  11. 调度器优化,比如区分场景,boost,算法优化,参数调教,使用量限制,进程绑定,线程链绑定等等
  12. 与第三方厂商合作做优化,比如微信,王者荣耀,qq 飞车的 90hz,吃鸡等

上面列举的只是一些大类和上层的策略,底层和一些细小的优化就不提了,事实上各大手机厂商做的优化非常多,尤其是技术沉淀比较深的华为,底层的优化做的非常细致,每个模块都有他们的工程师在 cover,也自己写了很多驱动模块和 service ,保证更好的用户体验

当然 Android 大版本也会有一些优化,比如常规的框架锁优化,虚拟机性能优化,Pre-Fork,后台限制,LMK优化等等,但毕竟很多事情手机厂商已经做了的。

其实安卓体验变好并不是手机厂商或者是谷歌某方的功劳,在这个过程中,手机厂商定制的andriod系统、谷歌公司甚至是APP开发者都承担了重要的绝色。缺少了任何一方的努力都是做不到今天这个地步的。

手机厂商对安卓的定制,国内主要是MIUI、EMUI、Flyme等几家大厂,手机厂商定制和谷歌对原生Android开发之间是相辅相成互相借鉴的关系。

谢邀,我想从应用冷启动这个角度,具体聊一聊我对手机厂商优化安卓手机性能的看法。比如“冷启动”。

冷启动是一个与操作系统强相关的问题,不同的操作系统环境差别非常大。这篇文章,我们针对安卓系统来解释这个问题,其他操作系统可能会有不同。

应用冷启动指的是:当启动应用时,后台没有该应用的进程,这时系统需要重新创建一个新的进程分配给该应用,并且创建必要的系统对象,申请相应的资源。

相对的热启动指的是:当启动应用时,后台已有该应用的进程,一部分相关资源也没有释放。在这种情况下,系统会从已有的进程中来运行启动流程,这个方式叫热启动。比如,按back键/home键,应用虽然会退出,但是该应用的进程是依然会保留在后台。

很明显,冷启动经历的流程和占用的资源,会比热启动多。事实上冷启动卡顿问题,也是安卓系统卡顿的一个重要场景。所以对于安卓应用开发者而言,冷启动速度是一个重要的优化项。

常见的应用层优化手段,主要是减少Application和第一个Activity对象的初始化时间,具体地说就是尽量少在onCreate里面写代码。那么必要的初始化工作,尤其是功能模块的加载和初始化,该怎么办呢?工程上的处理方案主要是“懒加载”,即不在应用启动时加载和初始化资源,而是在用到的时候再加载。大家看到有些应用,会下载其他apk,但是又没有安装这些apk,这种情况多半是应用开发者使用了懒加载的插件化架构,运行时动态加载插件apk执行具体功能。

当然还有一些“骗”用户的手段,比如将初始化过程中的白屏,替换为某个底图,用户会觉得这是应用的一部分,实际上这时候应用还没有完成初始化。

我们通过如下方式,就可以将白屏干掉:

创建一个无白屏主题:

<style name="LaunchStyle" parent="AppTheme">
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowNoTitle">true</item>
</style>


将无白屏主题设置给Activity:

<activity>
  android:name=".MainActivity"
  android:theme="@style/LaunchStyle">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>


然后在启动过后再将主题替换回来:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setTheme(R.style.AppTheme);
  setContentView(R.layout.activity_main);
}


然而这种手段,也只是个障眼法,并不能真正提升应用的启动速度。

实际上针对冷启动卡顿,应用能做的事有限。最有效的优化手段,还是在操作系统层面做文章。也就是说手机厂商,才是真正有可能解决冷启动问题的一方。这里我们以中兴天机Axon 10 Pro 5G版为例,看看手机厂商能做哪些事儿。

比如,一般来说手机为了省电,大部分时候CPU和GPU都不是满频运行的,只在特定情况下才会马力全开。然而什么情况是特定情况呢?需要开多少呢?是CPU全开还是GPU全开呢?或者保持某种特定的工况?中兴天机Axon10 Pro搭载了通过机器学习优化的调度器,使得应用启动时CPU/GPU速度和功耗,达到了一个平衡,从而解决了这个问题。冷启动过程中CPU性能全开加速启动。

再比如,应用冷启动需要消耗大量的IO资源,所以提高IO速度,是优化冷启动的重要手段。而要优化系统IO速度,最有效的手段除了升级硬件,就是升级文件系统。F2FS的大名我想关心华为手机的用户应该都听说过了,相比于主流的ext4文件系统,F2FS提供了:

  • 更好的加密特性;
  • 更快的读取速度;
  • 加快针对零碎小文件的读写速度;
  • 对固态存储的寿命保护;

其核心优势,就是对小文件随机访问的效率的巨大提升。

然后很多人可能不太了解的是,中兴天机Axon 10 Pro也采用F2FS文件系统,而且是首款骁龙855+F2FS,可谓强强联合。

于是我们可以看到,同一款手机,搭载了F2FS的版本,和搭载ext4的版本,跑出了完全不同的成绩:

事实上,作为一款5G手机,中兴天机Axon 10 Pro 5G版的优化不仅仅在系统层面,而是在器件小型化、天线设计、电磁兼容,以及功耗发热领域都作出了创新性的优化。可以说这款手机展现了手机厂商对于安卓系统手机体验优化的巨大可能性。

众所周知,如今的智能手机市场早已不像多年前那般“百花齐放”。在激烈的竞争格局下,手握优势资源的各大厂不仅仅是“脱颖而出”,甚至是直接“干掉了”数以万计的竞争对手,使得市场演变成了如今少数寡头贴身对决的局面。



当然,我们并不是说曾经消失的手机品牌有多值得怀念,毕竟,无论是从产品成本控制、功能开发,还是从销售和售后渠道等各方面来说,现如今的大厂都有着不可忽视的优势。譬如说某些成本高昂的新技术和硬件,如果没有财力充足的大厂积极推动,可能根本就不会出现在市面上。又比如说在手机系统的体验方面,这些企业不仅有能力自行开发更加美观的UI(用户界面)和功能,有时候还会有一些深入系统底层甚至是内核的独家优化。


等等!这些“独家优化”真的意味着更好的用户体验吗?至少谷歌内部专门负责发现软件严重安全漏洞的Project Zero团队并不这么认为。就在近日有消息显示,他们向三星方面发出了一份安全警告,也顺带揭开了智能手机业界大厂“为所欲为”的现实。



这些人是在2019年负责维护Linux内核的顶级程序员们


简单来说,对于像Android这样的开源操作系统来说,它的代码其实是全世界许许多多程序员共同努力的智慧结晶。但是这些程序员的“级别”,或者说他们所做的工作的重要性显然不是一致的。有部分人专注于开发Linux内核,编写与优化系统最核心的那些代码,或是给他们打安全补丁,这就是所谓的“上游开发者”。而诸如智能手机企业内部的开发团队,他们本来的工作应该是在已经成型的开源系统代码上,加上自己所需的外围功能、包括界面和程序等以形成最终可用的固件,也就是所谓的“下游开发者”。


但有的时候,当下游程序员不知会上游开发者就随意“优mo化gai”系统底层代码时,他们的水平其实可能并不足以完全看懂那些堆积和迭代了许久的代码。而这时候问题就会出现了,手机厂商沾沾自喜的“优化”,结果或将反而会破坏原有的系统内核功能,衍生出更多的BUG、甚至是造成原本的安全补丁失效,给用户隐私和数据安全带来危险。



比如说谷歌此次之所以要找上三星,就是因为他们旗下一款中端机型Galaxy A50“魔改版”的内核中,被发现使用了不规范、且没有提交给上游内核开发者审阅的驱动程序。结果造成Android内核中一个专门用来防止应用程序非法访问硬件设备的安全措施失效。用三星后来在自家安全公示网站上的话来说,这一未经上游检查、擅自添加的驱动,直接导致了一个“可能执行任何代码”的糟糕漏洞。但好在三星方面及时发现了问题,并已经于今年2月的系统更新中修复了这一问题。



三星还算认错态度好,改正速度快,但其他厂商呢?


然而,正如Google Project Zero研究员Jann Horn所表示的那样,在整个智能手机行业中,喜欢瞒着上游开发者“魔改”系统的厂商,可并不只是三星一家。事实上这种既侵犯他人劳动成果、也存在严重安全隐患的行为在手机企业中并不少见。以至于Google Project Zero不得不把三星此次的事件作为一个典型例子,来告诫其他的手机厂商应该使用官方公布的、安全的应用程序接口和内核功能,或者至少在往系统内核里添加代码前,能够征询一下内核的原始开发者。


当然,有的朋友看到这里可能会说,手机厂商修改代码不通知上游程序员也有他们的道理呀,因为每家都想要有自己的独家功能,谁希望自家的硬件驱动或优化代码被别人掌握呢?



的确,我们三易生活不否认手机厂商这样做,大概率是出于维护自身知识产权或者商业保密的目的,但一方面来说,手机厂商的技术人员是否就一定能确保完全看懂上游内核作者的代码,是否就一定能保证自己“偷偷添加”的功能不出错呢?这显然很值得怀疑。其次,“独家优化”也好、不想公开的硬件驱动也罢,如果它们的添加会破坏系统原本就具备的安全特性,反而造成最终的安全性和稳定性下降,那这样的“优化”是否值得,又是否是真的是对消费者利益负责呢?


最后,我们觉得有必要提到的一点是,在PC领域所有的新架构处理器或显卡芯片,在上市前是一定会首先提交硬件驱动代码给Linux内核开发者测试和审阅的,同时也注定会在新版Linux的内核代码里留下痕迹——难道这些厂商就不怕泄露新品信息了吗?


 

Copyright © 2012-2018 红桃-红桃娱乐陶瓷餐具茶具公司 版权所有 非商用版本  备案号:琼ICP备9185188号

搜索

平台注册入口