【轉(zhuǎn)】鴻蒙系統(tǒng)與市面上的其他操作系統(tǒng)相比有哪些優(yōu)缺點?
?鴻蒙系統(tǒng)與市面上的其他操作系統(tǒng)相比有哪些優(yōu)缺點?

摸摸魚
在數(shù)碼的海洋里瘋狂摸魚
50 人贊同了該回答
HarmonyOS NEXT 把 Android 系統(tǒng)里最頭疼的問題——后臺任務(wù)解決了。
要知道 HarmonyOS 的后臺機制好在哪里,就必須知道安卓的后臺機制問題出在哪里。
安卓的問題
在 Android 早期(5.0以前),對于后臺任務(wù)的管理非常不規(guī)范,簡直是百鬼夜巡。系統(tǒng)只殺死應(yīng)用啟動的 Java?進程,應(yīng)用可以通過 Java 進程啟動系統(tǒng)管不到的 Native 進程。如果 Java 進程被系統(tǒng)殺死,就用 Native 進程把 Java 進程拉起來,這樣,應(yīng)用就永生不死了。
所以早期安卓飽受卡頓、發(fā)熱、掉電的困擾。民間也出現(xiàn)了冰箱、Xposed 框架用來解決相關(guān)的問題。隨著安卓的更新,系統(tǒng)能根據(jù) uid 殺死進程,上面的方法不起作用了。
另一種方法是監(jiān)聽廣播,比如系統(tǒng)時間更新、開機、解鎖、網(wǎng)絡(luò)狀態(tài)改變都會對應(yīng)用發(fā)出廣播,應(yīng)用可以利用廣播觸發(fā)拉起進程。在 Android 7.0,系統(tǒng)移除了許多隱式廣播,并對后臺應(yīng)用監(jiān)聽廣播做了很多限制,這種方法也沒用了。
隨后,出現(xiàn)了一個非常有名的庫,叫 MarsDaemon,通過雙進程守護的方式實現(xiàn)了應(yīng)用的保活。但是隨著后續(xù)的系統(tǒng)更新,這種方式也逐漸消亡了。

在?;钌希瑧?yīng)用開發(fā)廠商幾乎無所不用其極,有在屏幕上顯示一個像素?;畹?,有在后臺播放無聲音樂?;畹?,有建立保活聯(lián)盟,聯(lián)盟內(nèi)的成員集成 SDK 互相拉起的,當(dāng)然,還有通過 py?加入廠商白名單的。
其實安卓現(xiàn)在對后臺任務(wù)有 WorkManager 這樣很好的支持的,但是在國內(nèi)應(yīng)用濫用后臺任務(wù)的大背景下,?WorkManager 基本被國內(nèi)的定制 UI 砍廢了。有的系統(tǒng)上 WorkManager 直接不能運行,能運行的一天到一天半運行一次就不錯了。
鴻蒙的做法
鴻蒙的后臺任務(wù)是怎么樣的呢?
鴻蒙把后臺任務(wù)分為了四種類型:短時任務(wù)、長時任務(wù)、延時任務(wù)、代理提醒。
短時任務(wù):適用于實時性要求高、耗時不長的任務(wù),例如狀態(tài)保存。每次最多允許三分鐘,在低電量時只允許一分鐘。每個應(yīng)用每天默認(rèn)只有10分鐘配額,這個配額會根據(jù)用戶使用習(xí)慣調(diào)整,應(yīng)用可以通過接口查詢剩余配額。應(yīng)用需要在前臺或退至后臺5秒內(nèi)申請短時任務(wù),否則會申請失敗。一個應(yīng)用同一時刻最多申請3個短時任務(wù)。僅當(dāng)應(yīng)用在后臺時,對應(yīng)用下的短時任務(wù)計時,而且同時有多個短時任務(wù)不重復(fù)計時。比如像下面這種情況,計時就是①+③+④。

應(yīng)用不能占著短時任務(wù)超時,如果超時不走,系統(tǒng)會把應(yīng)用回調(diào)應(yīng)用處理超時的方法,把應(yīng)用“請出去”。如果請不走,系統(tǒng)就直接“趕人”,終止對應(yīng)的應(yīng)用進程。
長時任務(wù):適用于長時間運行在后臺、用戶可感知的任務(wù),例如后臺播放音樂、導(dǎo)航、設(shè)備連接等,使用長時任務(wù)避免應(yīng)用進程被掛起。包括數(shù)據(jù)傳輸、音頻播放、錄音、定位導(dǎo)航、藍(lán)牙相關(guān)、多設(shè)備互聯(lián)、WLAN相關(guān)、音視頻通話和計算任務(wù)。其中,WLAN、音視頻通話只向系統(tǒng)應(yīng)用開放,計算任務(wù)只向特定設(shè)備開放。而且,申請了DATA_TRANSFER(數(shù)據(jù)傳輸)的長時任務(wù),系統(tǒng)僅會提升應(yīng)用進程的優(yōu)先級,降低系統(tǒng)終止應(yīng)用進程的概率,但仍然會掛起對應(yīng)的應(yīng)用進程。對于上傳下載對應(yīng)的功能,需要調(diào)用系統(tǒng)上傳下載代理接口托管給系統(tǒng)執(zhí)行。

而且,應(yīng)用不能掛羊頭賣狗肉,如果應(yīng)用申請了長時任務(wù),但未真正執(zhí)行申請類型的長時任務(wù)或申請類型的任務(wù)已結(jié)束,系統(tǒng)會對應(yīng)用進行管控。例如系統(tǒng)檢測到應(yīng)用申請了AUDIO_PLAYBACK(音頻播放),但實際未播放音樂,系統(tǒng)則會終止對應(yīng)的進程。
而且,應(yīng)用在任務(wù)結(jié)束之后需要主動取消任務(wù),否則系統(tǒng)會強行取消。例如用戶點擊音樂暫停播放時,應(yīng)用需及時取消對應(yīng)的長時任務(wù);用戶再次點擊音樂播放時,需重新申請長時任務(wù)。
延遲任務(wù):應(yīng)用退至后臺后,需要執(zhí)行實時性要求不高的任務(wù),例如有網(wǎng)絡(luò)時不定期主動獲取郵件等,可以使用延遲任務(wù)。當(dāng)應(yīng)用滿足設(shè)定條件(包括網(wǎng)絡(luò)類型、充電類型、存儲狀態(tài)、電池狀態(tài)、定時狀態(tài)等)時,將任務(wù)添加到執(zhí)行隊列,系統(tǒng)會根據(jù)內(nèi)存、功耗、設(shè)備溫度、用戶使用習(xí)慣等統(tǒng)一調(diào)度拉起應(yīng)用。

一個應(yīng)用同一時刻最多申請10個延遲任務(wù),而且延遲任務(wù)最多允許兩分鐘,超時不走會被系統(tǒng)強制終止。
代理提醒:代理提醒是指應(yīng)用退后臺或進程終止后,系統(tǒng)會代理應(yīng)用做相應(yīng)的提醒。適用于定時提醒類業(yè)務(wù),當(dāng)前支持的提醒類型包括倒計時、日歷和鬧鐘三類。當(dāng)應(yīng)用退至后臺或進程終止后,系統(tǒng)會代理應(yīng)用做相應(yīng)的提醒。
既然后臺機制是這樣,那應(yīng)用怎么進行推送呢?在 HarmonyOS NEXT 中,所有鴻蒙原生應(yīng)用全部都要接入華為 Push。像是微信\QQ這樣的應(yīng)用,就沒有理由在后臺駐留接收提醒了。而且,華為 Push 的能力也大大增強,不僅能夠 Push 普通的通知,還能 Push 實況窗、甚至更新桌面服務(wù)卡片的內(nèi)容也不在話下。

鴻蒙 NEXT 的后臺任務(wù)管理看齊 IOS,但是華為此前發(fā)布的手機可都是安卓手機的內(nèi)存。

這樣看來,鴻蒙 NEXT 手機就兼具IOS對內(nèi)存的高效利用和安卓手機的大內(nèi)存,確實可以說是遙遙領(lǐng)先了。
編輯于 2023-12-04 10:57