乐趣区

关于android:深度比较EMUI和MIUI后台处理

安卓的后盾机制既是安卓的一个劣势,也是碎片化很重大的一个个性,作为三款依赖安卓后盾服务的 App 的开发者,写下这篇文章来比拟一下 EMUI 和 MIUI 这两个最常见的安卓零碎的后盾解决逻辑,先把要比拟的零碎列一下:

  • EMUI 10.0.0,Android 10
  • MIUI 12.0.6,Android 10

比拟后盾机制的前提是两个零碎均应用缺省设置,不思考诸如省电模式、极简模式等非凡状况,这样合乎大部分用户的应用状况。

概述

常见的安卓 App 驻留后盾形式有三种:

  • 注册零碎服务,比方无障碍服务
  • 应用安卓定时服务
  • 常驻告诉栏的前台服务,即 Foreground Service

这三种后盾模式,我都开发过相应的 App,上面会别离举例来比拟。除此当前,还有一些匪夷所思,也非官方认可的谋取驻留后盾的形式,比方播放一个无声的音乐、开启一个单像素的悬浮窗等等,毕竟不属于邪道,本文就不比拟了。

在比拟之前,有必要阐明一下,对于当初各厂商安卓零碎,比方咱们要比拟的 EMUI 和 MIUI,仅仅依照这种正规形式注册服务是不够的,还是很容易被零碎解冻或杀掉,起因是因为按正规形式注册服务,所有的利用都能够做到,后盾多了,加上一些利用没有节制,手机就必然卡顿费电,所以厂商们的做法也很好了解,默认全杀,做一个只能手工配置的白名单,用户退出白名单才容许后盾服务,这样对于大部分普通用户,不必做任何设置就免受恶意软件之苦。

须要留神,不同零碎白名单配置稍有不同:

  • MIUI 设置》利用设置》利用治理》抉择利用》设置省电策略、自启动
  • EMUI 设置》利用》利用启动治理》抉择利用》设置容许后盾流动、自启动

上面开始测试三种后盾形式。

无障碍服务

我开发的微动手势,就是一个典型的无障碍服务类利用,安卓零碎反对利用注册为无障碍服务,无障碍服务不仅提供了一种驻留后盾的办法,其自身还提供了很多一般利用无奈做到的性能,比方模拟系统交互、模仿手势等。所以很多安卓 App 都借助无障碍服务来实现某些性能,比方就连抖音 App 都提供了一个无障碍服务。

这里就以微动手势为例,装置实现并关上无障碍服务,而后我别离测试以下四种状况:

  • 默认:就是默认装置后不做任何设置
  • 加锁:在多任务界面中给利用的卡片加锁
  • 白名单:在零碎中将利用退出后盾白名单
  • 锁 + 白名单:下面两个都设置

每种状况下我进行四种操作测试,这四种状况都是用户常做的一些操作,而后判断微动手势的后盾是否工作失常,四种操作别离如下:

  • 锁屏:锁屏等一分钟后再解锁
  • 划卡片:间接在多任务页面中划去利用
  • 一键清理:在多任务页面中点一键清理
  • 耗尽内存:通过启动多个大型软件或游戏挤占残余内存

测试后果,我绘制表格如下:

EMUI MIUI EMUI(加锁) MIUI(加锁) EMUI(白名单) MIUI(白名单) EMUI(锁 + 白名单) MIUI(锁 + 白名单)
锁屏 失常 解冻 失常 失常 失常 失常 失常 失常
一键清理 被杀 被杀 失常 失常 失常 被杀 失常 失常
划卡片 被杀 被杀 被杀 被杀 失常 被杀 失常 被杀
耗尽内存 失常 失常 失常 失常 失常 失常 失常 失常

咱们认真看下这里的后果,显著 MIUI 比 EMUI 的后盾管制更严格,大略总结一下:

  • MIUI 认为用户操作优先于用户白名单,所以即便退出白名单,通过划卡片仍然将利用杀掉。
  • EMUI 认为用户白名单优先,只有退出白名单,用户即便划卡片,后盾都能失常保留,只将前台界面敞开。

两种形式孰优孰劣,我不做评估,但显然 MIUI 的形式,如果想保留后盾,用户在设置白名单之后,还须要加锁并小心防止划卡片。揭示一点,如果你在零碎里同时为利用设置了容许自启动,那么一些后盾利用在被杀之后会立即重启,也就是杀的成果变成了重启。

定时服务

这里说的定时服务是个统称,指借助安卓的某个 ” 定时 ”API 来实现一个定时运行的后盾,安卓本人在这里也很乱,前前后后提供了 AlarmManager、JobSchedule、WorkManager 等很多不兼容的 API 来反对后盾的定时工作,我这里统称为定时服务,我开发的碎片记忆就是典型的定时服务,这是一个背单词的利用,须要定时来查看卡片是否须要温习,而后主动从后盾弹出。

仍然按上述测试方法,后果如下:

EMUI MIUI EMUI(加锁) MIUI(加锁) EMUI(白名单) MIUI(白名单) EMUI(锁 + 白名单) MIUI(锁 + 白名单)
锁屏 失常 解冻 失常 失常 失常 失常 失常 失常
一键清理 被杀 被杀 失常 失常 被杀 被杀 失常 失常
划卡片 被杀 被杀 被杀 被杀 被杀 被杀 被杀 被杀
耗尽内存 被杀 被杀 被杀 失常 失常 被杀 失常 失常

从这个后果来看,定时服务绝对无障碍服务,优先级要低一些,在某些无障碍服务依然能够失常工作的场景下(比方划卡片和内存耗尽),定时服务就被杀了,不过这次 MIUI 和 EMUI 体现的绝对统一一些。

这里有一点值得一提,安卓提供的定时机制里,有一部分是容许利用被杀后仍然能被定时唤醒的,但这样的话,恶意软件显然能够利用这一点做到永生不死,所以像 EMUI 和 MIUI 这样的系统对这种定时都做了额定的限度,这里不再开展详述了。

前台服务

Android 的前台服务是一个术语:Foreground Service,示意用户能够感知到的后盾服务,所以会在告诉栏给出一个常驻告诉,这是很多利用应用的后盾机制,我开发的电池守护就应用了这个机制,通过这个机制,让利用能够在后盾获取电量变动信息,从而对用户进行充电或拔除充电器的告警。

仍然应用雷同的测试方法,测试后果如下:

EMUI MIUI EMUI(加锁) MIUI(加锁) EMUI(白名单) MIUI(白名单) EMUI(锁 + 白名单) MIUI(锁 + 白名单)
锁屏 失常 失常 失常 失常 失常 失常 失常 失常
一键清理 被杀 被杀 失常 失常 失常 被杀 失常 失常
划卡片 被杀 被杀 被杀 被杀 失常 被杀 失常 被杀
耗尽内存 被杀 失常 被杀 失常 失常 失常 失常 失常

从耗尽内存的测试后果来看,前台服务的优先级级仿佛介于无障碍服务和定时服务之间,并且 EMUI 和 MIUI 仍然有不小的差别。

总结

从下面的测试来看,无障碍服务、定时服务、前台服务几种服务类型之间有奥妙的差别。而且 MIUI 和 EMUI 的的解决也有不少的差别,从我测试的两个版本看,MIUI 更严苛一些,某些状况下 EMUI 不杀,MIUI 会杀。对于开发者来说这是比拟苦楚的事件,而对于用户来说,就更难了解这些轻微的差别了。好在增加白名单和加锁之后,基本上还是能保住后盾,所以这类须要后盾的利用,通常只能疏导用户去做这些设置。

这个测试只比照了 MIUI 和 EMUI,我置信谷歌原生、三星以及其余厂商还是会有更多的差别,安卓的碎片化可见一斑。

退出移动版