TECH2IPO/创见

「 新生活 新科技 新零售」

投稿
京ICP备14046667号

百度手机卫士告诉你, 为什么小火箭那么酷炫但是手机还是卡卡卡?

不仅杀掉Activity 和 Service,最重要的是消灭 Receiver。但是问题来了,百度手机卫士“强效加速”是如何消灭 Receiver的呢?

目前大多数的“一键加速”起不到关键作用

“卡顿”“越用越慢”“反应迟钝”在 Android 5.0(Lolipop) 之前基本上属于“宿命”问题,不管你是用四五千元的“豪华旗舰机”,还是用千元级别的 N 核高配“性价比机”;不论是你使用具有 Google 高贵血统的 Nexus 亲儿子系列,还是“发烧级别” MIUI/CM 等第三方优化 ROM,这些令 Android 用户烦恼的问题始终不能被彻底解决。即便是有很多“手机卫士”协助用户,但用过一段时间后用户会发现,手机该卡的时候还卡,该慢的时候还慢,有意思的是不少用户已经形成了“无意识一键加速综合征”,延续了在使用 Windows 系统的时候“无意识刷新”的光荣传统。其实,不管是“一键加速”还是“刷新”,都起不到真正的作用,最多只是安慰剂罢了。

后来,百度手机卫士最近推出了“强效加速”功能,据介绍可以有效地解决这个问题,为此TECH2IPO/创见专门采访了百度移动安全部首席产品架构师阮龙。想要了解“强效加速”的原理,首先我们要先简单科普一下,为什么和 iOS 系统比起来, Android 手机的卡顿问题特别突出呢(对此很了解的同学可以先跳过,或者可以看看找找茬)。

在 Android 2.3 的时代,给 Android 手机“减负”的应用就已经出现,随着 Android 手机用户指数级别的增长速度,像百度、奇虎360、腾讯、金山等一直关注操作系统安全的大厂纷纷进入这个领域试图去解决这个问题,但这么多年来,解决卡顿问题的技术基本上没有飞跃式的进步。在接受 TECH2IPO/创见记者采访的时候,百度移动安全部首席产品架构师说道,现在很多厂商并没有把重点放在如何真正解决 Android 手机卡顿的问题上,而是把重点放在了如何让“一键加速”这个效果看起来更炫酷,比如增加一个具有豪华动态效果的“小火箭”等,大家都在这个方面竞赛。

正如前面所说的,造成 Android 手机卡顿的原因一个是进程太多,另外一个是垃圾太多,那么对应的解决方法一个是杀进程,一个是清垃圾,实际上现在很多的手机安全软件也是用这个方法解决问题的。但“道高一尺魔高一丈”,无良的开发者不会就这样被打败。手机卫士们再厉害,也并不能够组织被杀掉的进程再次自动激活,所谓“一键加速”只能在很短的时间内让用户感觉“有效果”,业界称之为“假加速”。这样用户会陷入到“用户手动杀进程,进程再自己偷偷启动”的恶性循环当中,如此反复反而让手机的运行速度更慢,电量也加速消耗。这也解释了许多不明真相的用户的疑惑:为什么会出现在半夜根本没有人用手机,但早晨一觉醒来却发现电量还消耗了30%的奇异现象。

杀掉 Receiver 才是解决卡顿的关键

上文提到过了,百度手机卫士在新版本中推出了“超强加速”功能,用户在使用超强加速后可以彻底关闭后台进程,最大程度上释放内存,解决手机卡顿的问题。技术层面实现了通过加速使进程进入“休眠”状态,这些进程就不会再接受系统发出的消息而被自动激活。当然,当后台运行的程序被清除,内存占用也得到释放后,也会让手机更省电,待机时间加长。

那么百度手机卫士又是通过什么原理做到的呢……这里需要简单普及一下 Android 系统的原理。阮龙介绍道:Android 系统主要有四大组件 Activity、Service、Broadcast Receiver、Content Provider。

  • Activity 是一个 Android 应用必备的组件,因为 Activity 是 Android 应用与用户交互的窗口,说直接一些就是你所用到的应用的界面。从视觉效果来看,一个Activity占据当前的窗口,响应所有窗口事件,具备有控件,菜单等界面元素。

  • Service 服务,简单说就是剥离了界面的 Activity,只不过Service 不抛头露脸,只是默默无声的做坚实的后盾。做个比喻,如果 Activity 是一档电视节目的摄影棚和主持人的话,那么 Service 就是在幕后工作人员,接收导播的指示完成相关事务的模块。

  • Broadcast Receiver (下文简称 Receiver) 就是那个发号施令的编导。在实际应用中,我们常需要等,等待系统抑或其他应用发出一道指令,系统会负责在相关事件发生的时候及时通知到该 Broadcast Receiver,这种模式适合于这样的场景:某事件方式 -> 通知Broadcast -> 启动相关处理应用。比如,监听来电、邮件、短信之类的,都隶属于这种模式。

  • Content Provider 是 Android 提供的第三方应用数据的访问方案。在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不允许其他直接访问的,但有时候,沟通是必要的,不仅对第三方很重要,对应用自己也很重要,Content Provider 就起到这样一个作用。

对这四个组件的介绍略有些简单,如果要认真谈他的原理就是另外一篇文章的问题,我们具体结合百度手机卫士来简单谈一谈手机卫士们到底是怎么做到加速功能的。

据阮龙介绍,很多的手机安全软件做加速的时候一般只消灭前两个组件也就是 Activity 和 Service,也就是说把主持人和幕后人员给临时撤了。但是负责发号施令的 Receiver 还在存活。Receiver 只要监视到用户的某种行为,觉得是自己发挥的时刻到了,就会唤醒幕后工作人员 Service 和主持人 Activity 出来“接客”。也就是说,如果不杀掉 Receiver 就会出现“用户手动杀进程,进程再自己偷偷启动”的恶性循环。

所以百度手机卫士“强效加速”的原理就也就浮出水面:不仅杀掉Activity 和 Service,最重要的是消灭 Receiver。但是问题来了,百度手机卫士“强效加速”是如何消灭 Receiver的呢?

不 root 也能解决卡顿问题才是真正的实力

话说回来,要彻底地杀掉进程有一个非常简单粗暴的方法,那么就是把手机 root。root 就是让用户获得手机系统的最高权限(iOS 的对应动作是“越狱”),但是 root 手机有两个麻烦之处,第一个是 root 手机的过程非常麻烦(像小米、魅族等手机有一键 root 的方法相对简单),另外一个是 root 之后手机的安全性就下降了,一般来说如果用户因为 root 对手机造成了损害都是得不到正常的售后服务的,即便有一些手机对 root 的管理十分严格,但一些应用会诱惑用户给予其 root 的权限。在这两座大山面前,root 手机的用户比例并不大。说简单一些,如何在不 root 手机的情况下还能彻底杀掉 Receiver,就是百度手机卫士“强效加速”实现的最大突破。

熟悉 Android 系统的用户可能知道,如果我们想手动杀掉一个进程也不难,一般手机都会提供一键清除的快捷键,但是这个杀得不彻底。我们可以在设置-应用中查看正在运行的应用,然后点击某个应用会出现这个应用运行的情况(如图),页面上有两个按钮,一个是“停止”,一个是“报告”。点了“停止”,这个应用就彻底退出了。我们知道还有那个自启动的老问题的存在,但是换过来想如果他只要一启动我们就用这种方式杀掉就可以间接实现类似“强效加速”的功能吗?唯一的问题是我们不能时刻守着后台做这件事情。

据阮龙介绍,百度手机卫士在研究 Android 系统的时候,发现了一个很有用的辅助功能叫“模拟点击”,也就是说,通过某种技术手段来模拟用户点击“停止”这个按钮,从而解放用户的双手。所以当你看到在手机中安装了百度手机卫士,就能在手机设置的“辅助功能”选项中看到百度手机卫士的提示(如图)。

原理就是这么简单。

当问到如果百度把这个简单的原理透露给媒体,那么友商肯定会借鉴的时候,阮龙说这是一件不可避免的事情,别人在研究加速效果怎么酷炫的时候,我们一直在解决这个问题:如何在不root的情况下帮助手机彻底消灭无用进程。

当然,百度手机卫士会了解哪些应用可以杀掉,哪些需要保留,这是一个基本问题。

Android 自身也在努力但难解

实际上,Google 也一直明白 Android 系统有这样的问题存在,也在试图在开源的情况下尽可能地优化 Android 系统。比如在 Android 4.4(KitKat) 以及 Android 5.0(Lolipop) 中,把应用程序的运行模式从 Dalvik 换成了 ART,也就是“Android Runtime”。Dalvik 是 Android 系统的一个层级,在某种程度上可以提高开发效率(至于为什么这是一个比较复杂的问题),但是应用程序每次运行的时候,一部分代码都需要重新进行编译,这过程需要消耗一定的时间和降低应用的执行效率,最明显的便是拖延了应用的启动时间和降低运行速度,这也是为什么 Android 天生会卡的一个重要原因,而取代 Dalvik 的 ART 模式则能够通过用户在安装应用程序时,自动对程序进行代码预读取编译,让程序直接编译成机器语言,免去了 Dalvik 模式要时时转换代码,实现高效率、省电、占用更低的系统内存、手机运行流畅。所以 Google 说只要使用 Android 5.0 ,即便是很多年前的低配置机器也可以流畅使用 Android。

那么这样一件普大喜奔的事件为什么得不到响应呢?原因就在于手机厂商懒得去适配多年前的旧机子了,即便是亲儿子,也只给 Nexus 4 以上机型适配。另外 ART 模式也需要应用的兼容,之前有很多用户反馈在切换到 ART 模式之后发生了应用不兼容的现象导致崩溃。

其实,很多开发者也有很大的责任,比如在编写程序的时候没有把 Android 的各项进程分类(一共有七种),为了偷懒就会把所有的程序都保留在内存当中,而且拒绝系统将其从内存汇中释放,这样一个应用就变得流氓起来。

即便 Google 也在努力优化这一问题(包括像小米和华为这样的第三方 ROM 开发者也做了很大的努力),但是只要 Android 系统还是开放的,那么“道高一尺魔高一丈”的现象还会发生,就比如应用的连带唤醒。

还记得上面介绍的 Android 系统四大组件中还有 Content Provider 么?我们在介绍“强效加速”的时候也没有提及到把这个组件杀掉,这是因为要杀掉这个组件的困难是在太大了,必须要 root,不 root 的话现阶段还没有办法解决。

我们知道 Content Provider 是给每一个独立的应用当一个信使的作用,所以一些公司旗下的一系列应用就利用 Content Provider 的功能相互唤醒,让已经通过百度手机卫士“超强加速”深度休眠的应用被重新激活。比如有的 Android 用户会发现,你在启动淘宝客户端的时候,微博的官方客户端也会同时启动,就是这个原理。当然这不一定都是坏事,比如你在使用淘宝购物的时候,也需要唤醒“支付宝钱包”这个应用来支付。只是有些恶意的应用会滥用这种功能,导致问题的发生。

最后阮龙也表示:“我们只能希望身处 Android 生态系统的开发者能够自觉一些,那么问题就会少很多”。


评论于站点 回复 评论 删除 隐藏

评论于站点 回复 删除 隐藏