Android系統執行機制和碎片改變不了嗎?為什麼呢?

活動中心17653708


推送機制:在iPhone上,會把所有有社交功能的app全部打開推送,比如:微信,微博,qq,fb, skype,豆瓣,gmail,etc。部分其它類型的app也會打開推送,允許推送的app大概在10個以上。

在Mate 9上,如果要實現同樣的接受即時推送的目的,須將這10多個app全部設置成開機自啟動,並保護後臺(不允許鎖屏殺後臺)。如果兩個條件有一個不滿足,我就收不到推送。但這樣的話,耗電會非常高,嚴重降低待機時間。

個人覺得這是華為(或安卓)手機的一個致命缺陷。但我奇怪的是,似乎關注這一點的人似乎並不多。為什麼呢?試猜有如下幾個理由?

1.雖然華為自動殺掉所有非即時聊天類app的後臺,但大多數人對非即時聊天類的推送需求不大。所以,對多數人來說,這個推送體驗跟蘋果差距不大,少數幾個有後臺的app也不會耗太多電。

2.目前的安卓現狀就是如此,所有的安卓廠商都解決不了這個問題。所以,媒體也不大關注這個問題。畢竟,黑掉了安卓,不符合除了蘋果以外的手機生態網的利益。媒體不關注,自然普通人也不關注。

3.瞭解並不能接受安卓這個缺陷的人都在使用蘋果手機?


北京優恩米


首先,我們需要知道為什麼Android之前很容易卡頓。關於這個答案,一直以來都是眾說紛紜,有人說Android卡是因為系統資源分配不均,有人說是因為用的越久垃圾文件越多,其實這些說法都有道理,但是都沒有說到最基本的根源上。

程序運行機制——已經發生了改變

首先,Android系統在以前其實是一個虛擬機系統,我們知道程序員對Android上APP的編寫過程都是通過Java語言完成的。雖然Android是基於Linux環境開發的操作系統,但是在運行Java編譯的程序時,還是要事先構建出一個可以運行Java語言的虛擬機環境,所以在之前的Android系統中,都存在一個Dalvik虛擬機制。

在之前的Dalvik虛擬機制下,Android每個程序在運行時,都要先創建一個Dalvik虛擬機環境,然後將程序放在虛擬機上運行,你開的程序越多系統負擔就越大,手機就越卡。更蛋疼的是用戶每次使用一款軟件,該軟件都需要先在Dalvik虛擬機中進行編譯,這意味著如果將程序關閉,下次打開時還需重新進行編譯,系統執行效率可想而知。所以在這樣的虛擬機環境中,Android想不卡都難。

安卓執行機制JNI、Dalvik、ART之間的比較 。android L 改動執行機制。

Android L默認採用ART執行環境。全然兼容64位移動處理器。Google稱這將比此前的Dalvik模式性能提高兩倍,可是會佔用很多其它的內存空間。Android有三種執行模式:JNI、Dalvik、ART。Dalvik明顯是最慢的,全然的JNI模式是最快的可是開發難度高,ART介於兩者之間。而且不影響現有開發模式,所以Google選了ART。

1)JNI:在開發過程中使用編譯器在C/C++等語言直接編譯成機器碼。執行的時候可以充分利用系統性能,這是最快的。iOS的Object C和Android 的NDK都是這樣的模式。

2)Dalvik:Android L系統之前全部Android版本號的執行方式,採用的是字節碼。在執行的時候解釋執行變成機器可以識別的機器碼。這個過程是比較緩慢的。

3)ART:Android 4.4開始推出的新的執行環境,在APP安裝的時候使用dex2oat工具直接把DEX文件轉換為機器碼文件,執行的時候以機器碼方式執行,可以充分利用系統性能;此外。改進的內存回收機制使得ART執行模式下的內存回收速度僅僅有Dalvik執行時模式下的50%。也可以提升系統執行速度。

所以谷歌在Android 4.4版本的操作系統中第一次加入了ART模式,全稱是Android RunTime,在ART環境下,Android只在程序安裝的時候進行一次編譯,將程序的Java語言轉化為適合Android系統運行的機器語言,然後將編譯後的程序存儲下來,以後每次運行該程序都直接調用編譯後的程序,這樣就避免了程序每次運行時,都要重新編譯的麻煩了。


並且在Android 5.0 Lollipop中,ART架構完全取代了之前的Dalvik架構,之前的低效率編譯正式成為了過去,但是ART模式帶來的問題就是編譯後APP的程序大小會變大,對於手機的存儲空間的要求也變高了,但是在今天這個手機普遍標配64GB的時代,應用所佔空間變大應該並不是什麼大問題。在之前Android L剛剛推出ART模式的時候,很多應用都還沒有來得及試配,但是在現在Android 7.0時代,ART模式的優點已經完全體現出來了,很多Android手機的系統運行效率已經有了極大的改善。

資源調度問題——暴力手段解決

由於系統的開源本質,Google無法從代碼這一端口約束第三方的應用程序,這導致了Android系統應用質量參差不棄,並且在Android手機中,不同的應用在公平調度下分配CPU、GPU、內存和存儲空間等手機資源,導致各種應用都極力地想為自己爭取更好的運行環境,普通的軟件都這樣,更別說那些流氓軟件了,這些軟件甚至關都關不掉,自動喚醒機制和無限自啟動相當於天生就霸佔了一部分系統資源,小編說的什麼大家都應該明白。

並且Android系統的應用大家都知道是真正的後臺,程序在進程活動停止後都會保留在內存中,直到系統需要更多內存再釋放這部分資源。所以內存對於Android系統是非常重要的一項配置,我們近年來也看到Android手機上運存的大小越來越大,旗艦機型從3GB一口氣衝到了6GB,要知道Windows XP這個桌面操作系統都只需要2GB就可以流暢運行了!

就是因為Android系統的這個先天“缺陷”的存在,而谷歌在這方面又完全沒辦法像蘋果那樣控制住應用質量,所以堆硬件成為了最好的方法。除此之外,我們在近年來的Android系統中也看到了自啟動管理和應用授權等控制第三方軟件的方法出現,雖然不像iOS那樣效果顯著,但是對於應用調用系統資源也有了一定的有效管理。

系統碎片化問題——廠商的整合、優化工作還需努力。

在Android手機在長時間運行後,會產生很多緩存小文件,如:圖片、小視頻、表情,並且很多Android手機用戶還會將文件保存甚至是應用存在SD卡中,這無疑加重了系統檢索數據的工作量,並且這種“碎片”一樣的文件越多,雖然NAND Flash並不會有磁盤那樣的碎片化,但是也會出現所謂的“髒塊”,導致速度有所下降。華為之前就在Mate 8上使用了文件整理功能,在夜間閒暇時間,對手機做碎片化檢測,並啟動碎片化整理。這最多可以使手機的讀取性能提升達30%。

其實在以上三點都比從前有了很大改善的情況下,部分Android廠商的手機在卡頓等問題上已經不像從前那樣嚴重了,甚至在長時間的使用中達到了iOS使用體驗的標準,我們也看到願意從iOS轉投Andriod的用戶也越來越多,幾年前的移動操作系統市場基本上是Android和iOS平分秋色。


分享到:


相關文章: