深度比較EMUI和MIUI後臺處理

安卓的後臺機制既是安卓的一個優點,也是碎片化很嚴重的一個特性,做爲三款依賴安卓後臺服務的App的開發者,寫下這篇文章來比較一下EMUI和MIUI這兩個最多見的安卓系統的後臺處理邏輯,先把要比較的系統列一下:app

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

比較後臺機制的前提是兩個系統均使用缺省設置,不考慮諸如省電模式、極簡模式等特殊狀況,這樣符合大部分用戶的使用狀況。測試

概述

常見的安卓App駐留後臺方式有三種:遊戲

  • 註冊系統服務,好比無障礙服務
  • 使用安卓定時服務
  • 常駐通知欄的前臺服務,即Foreground Service

這三種後臺模式,我都開發過相應的App,下面會分別舉例來比較。除此之後,還有一些匪夷所思,也非官方承認的謀取駐留後臺的方式,好比播放一個無聲的音樂、開啓一個單像素的懸浮窗等等,畢竟不屬於正道,本文就不比較了。內存

在比較以前,有必要說明一下,對於如今各廠商安卓系統,好比咱們要比較的EMUI和MIUI,僅僅按照這種正規方式註冊服務是不夠的,仍是很容易被系統凍結或殺掉,緣由是由於按正規方式註冊服務,全部的應用均可以作到,後臺多了,加上一些應用沒有節制,手機就必然卡頓費電,因此廠商們的作法也很好理解,默認全殺,作一個只能手工配置的白名單,用戶加入白名單才容許後臺服務,這樣對於大部分普通用戶,不用作任何設置就免受惡意軟件之苦。開發

須要注意,不一樣系統白名單配置稍有不一樣:get

  • MIUI 設置 》應用設置 》應用管理 》選擇應用 》 設置省電策略、自啓動
  • EMUI 設置 》 應用 》 應用啓動管理 》 選擇應用 》 設置容許後臺活動、自啓動

下面開始測試三種後臺方式。table

無障礙服務

我開發的微動手勢,就是一個典型的無障礙服務類應用,安卓系統支持應用註冊爲無障礙服務,無障礙服務不只提供了一種駐留後臺的方法,其自己還提供了不少普通應用沒法作到的功能,好比模擬系統交互、模擬手勢等。因此不少安卓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,我相信谷歌原生、三星以及其餘廠商仍是會有更多的差別,安卓的碎片化可見一斑。

相關文章
相關標籤/搜索