![]() 安卓手機自從問世以來,就一直因系統(tǒng)卡頓而為人所詬病,尤其是對比IOS系統(tǒng)流暢的操作體驗,安卓更是花了極大的力氣放到改善系統(tǒng)卡頓的問題上。七八年過去了,Google的努力收效還是很明顯的,安卓5.0之后,加之處理器和內(nèi)存的升級,安卓手機確實流暢了不是一星半點,可是過個一年半載,原先流暢的手機又會卡卡停停了,難道系統(tǒng)也和電池一樣時間長了有損耗?為啥安卓系統(tǒng)就達不到IOS的流暢度呢?圈圈君今天來給大家答疑解惑。 為啥安卓系統(tǒng)不如IOS流暢? ![]() 一是先天不足:在Linux上跑個虛擬機,再用JAVA做開發(fā),雖然能減輕開發(fā)負擔(dān),獲得資源支持,但在后期優(yōu)化上的成本增加更多,Java不像iOS,不能提供任何操作來釋放內(nèi)存(iOS的開發(fā)語言O(shè)bject C能自行控制內(nèi)存釋放),而是通過系統(tǒng)的內(nèi)存回收機制來進行管理,但內(nèi)存回收是個雙刃劍,GC(Gabage Collection,垃圾回收)時所有線程都要暫停,也就是所謂的我們經(jīng)常遇到的機器卡頓。 二是后天開放帶來的混亂:強制與封閉,給iOS的應(yīng)用帶來了高度的統(tǒng)一和標準,而開放的Android必然帶來混亂這樣的負面作用,碎片化是眾所周知的惡果,一些應(yīng)用為了兼容更多舊設(shè)備,只能繼續(xù)使用低level的API,如微信,現(xiàn)在還是使用API level 9,就是為了能在Android 2.3系統(tǒng)的機型上使用,而Android 5.1支持的API level已達到22了,效率上顯然大打折扣,除此之外,開發(fā)上的開放性更是一個非常大的隱患,這也是今天要談的主要問題。 iOS為了流暢度,其實做了非常多的妥協(xié)來換取用戶體驗上的好感,比如墓碑式內(nèi)存管理、優(yōu)先UI渲染等,Google在2012年提出了黃油計劃(Project Butter),開始著手解決Android卡頓這個老大難問題,并從Android 5.0開始,將Dalvik虛擬機全面轉(zhuǎn)向ART虛擬機,后者在安裝應(yīng)用的時候會進行預(yù)編譯,將代碼轉(zhuǎn)換為機器語言存儲在本地,這樣在運行程序時就不用每次都編譯一次,執(zhí)行效率得到大大提升,同時,新的ART模式也降低了每次GC的時間,一些額外的優(yōu)化也可以避免GC的頻繁發(fā)生。 ![]() Google的這些作為讓Android系統(tǒng)在流暢度上有了實質(zhì)性的突破,從宏觀上講,Android是越來越不卡越來越流暢,那么,在如今這么強大的硬件支持下,為什么還會讓很多人覺得越用越卡呢? 原來是APP在后臺搞的鬼! Android應(yīng)用開發(fā)有四大組件,其中之一就是廣播接收器(BroadcastReceiver,以下簡稱Receiver),你像一個監(jiān)聽器,可以接收來自系統(tǒng)和應(yīng)用中的廣播。比如當(dāng)電量發(fā)生變化時,系統(tǒng)會發(fā)生一條廣播,接收到這條廣播后,就能在電量低時告知用戶保存進度或進入省電模式;而當(dāng)有電話進來,也同樣會產(chǎn)生一條廣播,這時系統(tǒng)就會通知電話接聽或電話號碼判斷等。 在Android中,全局的Receiver就近百種,它們可以監(jiān)聽各色各樣的狀態(tài)變化,比如開關(guān)機、通電斷電、電量變化、網(wǎng)絡(luò)狀態(tài)變化、電話呼出呼入、安裝卸載應(yīng)用、SD卡變化等。Android的開放性允許應(yīng)用程序注冊任意一個Receiver, 這也成為流氓應(yīng)用滋生的溫床,不良的開發(fā)者向系統(tǒng)注冊多個Receiver,讓它們接收各種廣播通知,然后執(zhí)行相應(yīng)的動作,比如自啟動。 所以,Android越用越卡的重要原因在于,后臺一直會有大量應(yīng)用在默默運行,而這些應(yīng)用根本就是清理不掉的,因為它們會在收到各種各樣的Receiver通知后再次啟動。作為對比,iOS中被殺掉的后臺進程再啟動的方法很有限,簡單的說,iOS是真的在清理內(nèi)存,而Android中許多應(yīng)用即使關(guān)閉仍想盡辦法不斷重生,各種進程與服務(wù)在后臺偷偷運行,從而引起系統(tǒng)卡頓與耗電,除了手機廠商,沒有任何應(yīng)用開發(fā)商會為你的手機續(xù)航著想,所以從這一角度,我們應(yīng)該是能理解這一行徑存在的原因的。 那這些應(yīng)用是怎樣重生的呢?主要有兩種:自啟動和關(guān)聯(lián)喚醒。 自啟動,在我們意識里,好像就等于Windows系統(tǒng)的開機自動運行,當(dāng)然咱這樣想也沒錯,不過你想的確實太簡單了,開機自動運行只是眾多自啟動方式中的一種。在Windows中,你關(guān)閉某個軟件后,它基本上不會再自行啟動了,然后Android中由于有Receiver這玩意兒,它讓自啟動變得很容易。 我們來做個對比,就一目了然了,圈圈君用的是國外知名購物軟件eBay和我國的淘寶對比: ![]() 看到?jīng)]有,那些有的沒的系統(tǒng)變化,都能引起淘寶的自啟動,現(xiàn)在的軟件為了搶占市場提高活躍度,已經(jīng)和流氓沒有什么區(qū)別了,手淘這個軟件已經(jīng)算科技圈比較“規(guī)矩”的軟件了,讓我們來看看下面這款—— ![]() 其他的就不說了,電量低也會被自啟動,百度云你咋不上天呢?! 關(guān)聯(lián)喚醒,大家應(yīng)該都有了解,也是相當(dāng)具有中國特色的產(chǎn)物,簡單地講就是當(dāng)一款應(yīng)用啟動后,它會在后臺偷偷啟動另一款應(yīng)用,基本上這些應(yīng)用都有裙帶關(guān)系,百度和阿里是其中代表。 ![]() 上圖中,當(dāng)運行“百度地圖”時,后臺會打開“百度云”,當(dāng)運行“手機淘寶時”,“支付寶”也同時在后臺開啟,這些都是你看不見的,你手機中的APP越多,那么關(guān)聯(lián)喚醒的APP就會越多。 那我們怎樣改變卡頓的現(xiàn)狀呢? 1、盡量不要安裝使用頻率極低的APP,對于百度系、阿里系、騰訊系等產(chǎn)品,盡量選用可替換的應(yīng)用,如“百度瀏覽器”、“百度視頻”等都可以棄之。 2、對于操作能力強的玩家,推薦使用Xposed框架 + 綠色守護的解決方案。 ![]() 綠色守護在科技圈里,幾乎是Android手機必裝神器之一,它其實更像一個無限清理內(nèi)存工具,啟動多少清理多少(只清理選定好的應(yīng)用),以不變應(yīng)萬變,用來應(yīng)付各種疑難雜癥,有效改善系統(tǒng)的流暢性與續(xù)航能力,非常推薦,它需要Xposed框架配合,安裝上需要較強動手能力。 3、如果你覺得Xposed框架安裝起來比較麻煩,當(dāng)然也可以直接使用一些第三方管理工具,圈圈君推薦360衛(wèi)士極客版,它能主動禁止掉每個APP的自啟動行為和切斷喚醒,理論上效果更好,就是需要針對操作。如果你不喜歡360,試試LBE也不錯的。 相信大家看完圈圈君的科普對于安卓卡頓也有了一定了解,如果大家覺得手機有些卡頓的話,不妨試一試上面的方法,若不能有效解決也可以來QQ公眾號【科技圈】找到我們,圈圈君竭盡全力幫你答疑解惑~ ===科技圈=== |
|