百度手機衛士告訴你, 為什么小火箭那么酷炫但是手機還是卡卡卡?
目前大多數的“一鍵加速”起不到關鍵作用
“卡頓”“越用越慢”“反應遲鈍”在 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 生態系統的開發者能夠自覺一些,那么問題就會少很多”。
標簽: 百度手機衛士