安卓16GB運存領先蘋果近四倍,為何有人覺得流暢度不如蘋果?

為和平而唱


蘋果ios比android流暢這個是不爭的事實,不過android發展到現在,與蘋果的差距已經不是那麼的大了,特別是在華為的一些手機上,華為對應用有經過編譯優化後,差距已經不再明顯,下面就來分析一下為什麼安卓流暢度沒有ios流暢。

1.安卓的效率低在於開發機制的不同

安卓應用使用java開發。Java的內存管理是通過jvm,達到一定的內存佔用量就會觸發gc,gc會把用戶線程停止掉。因此可能會影響兩方面,第一在觸發gc的時候卡頓,特別是full gc。長的可能達到幾秒甚至幾分鐘,可能以前有碰到過,現在隨著內存的擴充,有些手機比如華為的,內存已經達到了16G,現在基本很少遇到卡幾分鐘的。

而ios使用Objective-C,編譯器是老牌gcc,而這個gcc編譯出來的代碼又被蘋果專為ios架構優化到了極致,運行過程中不需要虛擬機在中間插手,執行效率自然很高。而且Objective-C與c語言一樣,內存使用完就釋放,所以基本不會因為內存問題導致卡頓。

2.系統設計不同:安卓APP無法統一

大家都知道ios是閉源的,而且蘋果唯一指定的應用商店也只有自家的APP Store,這就使得商店內的應用都要經過嚴格審核才能上架,所以一些比較差的應用無法上架。而且,ios只運行在蘋果自家的設備上,對應的軟件也只會運行在蘋果的設備上,所以開發者可以只針對蘋果的設備進行應用優化,而安卓是開源的,安卓廠家有非常多,各家的設備配置都不同,安卓軟件需要在各個硬件平臺上跑,可能就會引入很多bug,導致異常和卡頓。


3.硬件與軟件的契合度不同

如第2點所言,ios只針對蘋果自家設備,可以讓系統有針對性的對硬件能夠發揮的性能進行充分利用,使得系統軟件和APP軟件的運行效率更高。而安卓系統面對的廠家和設備類型可謂是參差不齊,開發者也不可能針對所有的機器型號進行開發,只能在比較主流的機器上進行測試並保證運行效果,所以他們為了兼顧整個產品線只能不得不降低遊戲體驗以達到高中低產品可以共用的效果。但是可以負責任的告訴大家,如果買的是各大廠商的旗艦機,根本無需擔心卡頓問題。


4.桌面響應優先級不同

當我們使用蘋果手機或者是安卓手機時,第一步就是解鎖找到相應程序點擊進入。ios就表現出來了流暢的一面,但安卓卻給人一種卡頓的現象,更別說後續深入玩遊戲或者進行其它操控了。這是為什麼?

其實這與兩個系統的優先級有關,ios對屏幕反應的優先級是最高的,它的響應順序依次為Touch--Media--Service--Core架構,換句話說當用戶只要觸摸接觸了屏幕之後,系統就會最優先去處理屏幕顯示也就是Touch這個層級,然後才是媒體(Media),服務(Service)以及Core架構。而Android系統的優先級響應層級則是Application--Framework--Library--Kernal架構,和顯示相關的圖形圖像處理這一部分屬於Library,你可以看到到第三位才是它,當你觸摸屏幕之後Android系統首先會激活應用,框架然後才是屏幕最後是核心架構。所以ios有“點擊即所得”的效果,安卓可能就會慢半拍。這是造成它們流暢度不同的因素之一。

以上4點就是我對ios比安卓流暢的分析,系統上的原因大致也就是這些原因了,其他的一些細節可能就是處理器硬件級別的限制了。


技術閣


現在智能手機品牌眾多,而且都非常有名,在競爭激烈的市場條件下,為了獲得更大關注度和銷量,各大手機廠商不斷給手機堆硬件配置,特別是安卓手機品牌,硬件同質化嚴重,因此只能把最頂級的硬件都給用上,比如現在上2K屏幕還不夠,必須120Hz刷新率,運行內存最低8GB,如今直接跳過10GB來到了12GB,三星S20 Ultra頂配版全球首發16GB LPDDR5運行內存,瞬間超越市面上80%的高端電腦內存,領先蘋果手機四倍。

安卓手機升級最快的硬件之一就是運行內存,小米,oppo,vivo等高通陣營的旗艦機都有12GB,三星為了保證技術優勢,先自己用16GB,半年後在下放給其它品牌。相反,iPhone就非常難,從iPhone7開始蘋果才做到一年一個G的增加,現在的iPhone11PRO系列為4GB,與三星S20 U頂配版形成1:4比例,小米等國產旗艦機也領先蘋果兩倍多一點。

然而很多網友卻說蘋果4GB比安卓8GB還流暢,和12GB、16GB的安卓手機沒有區別,甚至手機用了幾年後,蘋果4GB流暢度可以超過16GB安卓機。這種說法並非空穴來風,小編之前拿蘋果11ProMax(4GB內存)和S20 U版(16GB版本)、小米10Pro(12GB版本)對比,三星和小米並沒有因為超大內存而在流暢度方面領先蘋果。值得一提的是三星S20 U的系統動畫確實做到了媲美ios,非常流暢,或許是三星已經把16GB、120Hz刷新率、優化到位的ONE UI系統這三個參數完美結合。

iPhone和安卓機在運行內存上的差距是操作系統決定的,ios系統可以讓iPhone不需要太大的內存,就可以達到高流暢性,而安卓手機廠商只有不斷堆內存,才能保證手機流暢度更持久一些。ios系統能做到內存小、夠用而且流暢,主要有兩個原因,第一是ios系統消息推送機制,APP推送消息時,必須同一經過蘋果服務器,然後由蘋果服務器發送出去。安卓則不同,APP擁有各種權限,推送消息時必須獨立運行,因此即使安卓用戶清空後臺,實際上還有很多APP仍然處於進程狀態,導致運行內存莫名其妙的減少。比如8GB的手機,最理想可用狀態是5GB左右,一般都是4.5GB以下,這也就是為何很多安卓用戶吐槽運行內存只有一半可用,所以說安卓手機廠商只有上更大的內存,才能保證流暢。

第二是系統後臺機制不同,蘋果手機的後臺應用處於“凍結”狀態,不佔有內存,4GB內存可以完全用於正在運行的客戶端,目前一個手機APP超過4GB很罕見。安卓手機則不行,後臺和前臺所有軟件同時運行,運行內存需要更大一些,否則殺後臺很常見。不過從安卓6.0開始就有了很大改善,到現在的安卓10.0已經做得很不錯,高端旗艦機流暢性用起來和iPhone沒太大區別,當然這是使用一兩年左右,三年之後就會和iPhone形成明顯差距。

總之安卓系統不徹底改變運行機制,即使安卓手機的運行內存比iPhone大五六倍,流暢度也不會超過ios。






鄂北兄弟


安卓的16GB運存的流暢度和蘋果4G預存的流暢度對比,理論上來說安卓肯定是比蘋果要快的,但是為啥很多人用氣量覺得流暢度還是不如蘋果呢。

其實這跟系統有關係。

安卓系統對內存的掌控不夠絕對

安卓系統運存的使用取決於各應用進程的申請,為了規範申請,於是安卓對進程搞了一套管理規則。

安卓系統對進程的管理是基於進程的類型。

而進程的類型從重要程度分由高到低依次是:前臺進程、可見進程、服務進程、後臺進程、空進程。

1、前臺進程

顧名思義,前臺進程就是目前顯示在屏幕上和用戶交互的進程,在系統中前端進程數量很少,而這種進程是對用戶體驗的影響最大,只有系統的內存稀少到不足以維持和用戶的基本交互時才會銷燬前臺進程。因此這種進程重要性是最高的。

2、可見進程

可見進程也擁有一個可視化的界面,但是不能和用戶交互,通常可見進程在前臺進程的後邊,用戶退出前臺進程後就會顯示可見進程。

可見進程一般調用了生命週期方法OnPause(),可見進程比前臺進程重要性低,但是在交互方面影響還是很大,因為用戶可能隨時切換過去,所以系統不會輕易銷燬它。

3、服務進程

一個服務進程就是一個Service,它調用了startService,就是UNIX中說的守護進程,對用戶不可見,但是保證了一些重要的事件被監聽或者維持著某些狀態,比如網絡數據傳輸、後臺音樂播放、後臺下載資源等等。

這類進程在系統內存不足且為了保證前臺進程交互的順利進行的時候被銷燬。

4、後臺進程

這裡叫後臺進程可能會和一般意義上的後臺進程混淆,要說明的是,android裡的後臺進程是調用了OnStop()的,可以理解成在不可見進程,就是用戶暫時沒有和這個進程交互的動作,所以這裡後臺進程有點“待銷燬”的意思。

5、空進程。

這是一種系統緩存機制,其實就是個進程的外殼,當有新進程創建的時候,這個空進程可以加快進程創建速度,當系統內存不足的時候,首先銷燬空進程。

基本上只有基於這套規則,你就能申請到內存,理論上來說這樣是最可靠的,要多少申請多少,規規使用。

但是在國內則變味了,首先就是推送服務

國外能使用谷歌推送服務,但是國內由於某些原因使用不了谷歌服務,於是開始各手機廠商和軟件開始各顯神通。

首先是手機廠商,比如小米搞的小米推送,華為搞的華為推送,這些都是可以使用的,但是大多數開發者都不會使用,因為只能在小米或者華為手機上使用。

所以軟件開發者更喜歡使用第三方的推送服務或者自己實現推送服務,這樣就不用去做適配工作了,而且安全可控。

那問題來了,如果自己實現推送服務的話,必須要保證自己的APP隨身“活著”,於是一系列的保活方案出來了,比如在後臺播放無聲音樂,保留一像素頁面等等,這些操作的背後都是需要內存的,基本上所有APP都會做至少一種保活方案,那消耗內存是幾何級的。

工信部主推的統一推送聯盟,就是為了解決這種現象,既浪費資源又阻礙行業發展,但是目前統一推送聯盟還沒在市場正式使用,期待吧!

IOS系統對內存擁有絕對的權利

我覺得這是IOS系統與安卓的差別,這也算是閉源的一種好處吧。

IOS不允許APP有退出功能,所有APP的退出都由系統來決定。基本上APP只要退出到後臺超過10分鐘,就會被銷燬,但是會留下一張你當前的頁面,就是你雙擊Home鍵彈窗看到的APP截圖,這種被稱為“墓碑機制”。

所以即使蘋果內存在小,也不會卡頓的原因,理論上來說,IOS系統永遠只會運行一個APP,除了系統應用和哪些必須在後臺運行的APP(音樂APP,導航APP等)以外。

另外IOS又一套系統推送服務,所有的APP可以不用自己去實現推送,在APP後臺發出推送後,IOS系統接收到後會喚醒對應的APP,來處理推送。

總結

由於國內安卓系統推送服務不夠統一,導致各APP都實現保活方案,大量消耗內存,從而導致卡頓,另一反面由於國內軟件開發者的不規範開發,無節制申請內存,導致運行APP時卡頓。

而蘋果系統由於閉源且對內存擁有絕對的控制權,所以實現了一個系統同一時間只運行一個APP,這樣大大節省內存。

我是非著名攻城獅,希望我的回答對您有用,感謝您的點贊支持!


分享到:


相關文章: