Android 4.4 和 Android 7.0 的區別是什麼?
每一次安卓版本的更新,程序員們都會說加入了 xxx 功能,對 xxx 進行了優化。
一些媒體也會跟著鼓吹安卓越來越流暢,可以媲美 iOS。 然而,安迪—比爾定律大家也都是知道的。
那麼問題來了:
如果現在拿出一部在2013年賣2000元的手機刷上安卓7.0,和一部2017年賣2000元的手機刷上安卓4.4,哪個會運行的更流暢?
- 假如刷上了安卓4.4的2017年的手機更流暢,那是不是說這些年安卓系統升級用處不大?
- 假如刷上了安卓7.0的2013年的手機更流暢,那是不是說這些年硬體的發展並沒有卵用?
很久前寫過一個安卓保活的小程序,雙native進程保活,那時候老機型很多,公司里一些安卓開發者用得挺習慣的……
最近新上了一個項目需要用到保活,新來的小夥子用他自己的miui8做測試,基於Android6.0系統,發現保活失效了。
當時一臉懵逼,發覺一點屏幕上的結束進程就被回收了。
有點不服氣了,上絕招。
父進程創建兩個子進程後退出,兩個子進程分別設置為各自進程組的組長。
多次fork。
再加個Android service兩兩互保。
把所有想中斷進程的信號能忽略的都忽略掉,確保程序不會受到除了sigkill之外信號的影響。
結果全都沒卵用!!!
翻出了Android6.0源碼,全程跪著看完。新啟動的進程創建為一個組,之後你不管怎麼處理,子進程都會記錄在這個組裡,殺進程整組一起殺。理論上來說,只要幾個互保的進程動作足夠快,就算殺一組應該也有反應時間的。
事實是在我的小米上測試從沒成功過。有點懷疑小米是不是在準備殺進程的時候先將所有進程給掛起了,不然我不可能連一次執行代碼的機會都沒有。
後面沒再往下跟了,因為這個功能就算能改好,也不適應所有機型了,沒有意義。
另外,在我的設備上,微信同樣也做不到保活……經常會發生放到後台一段時間後要重新打開才能看到消息的情況。
回到問題,4.4跟7.0差距大嗎?答案是很大,流暢性跟安全性的差距都不是一點點。
進程管理的改進可以結束很多亂來的流氓軟體,虛擬機從dalvik變成art提高了速度和流暢性,還有不少推倒重來的東西。
這些細節分開來看可能不明顯,但是我想很多翻過Android代碼的人都能看到其中的改變。(這個題目下很多都是Android開發者吧)
---------------------
補充一段,害怕被罵。
從技術上來說,做保活的時候覺得挺有意思,但想做出來並不代表真的想把這功能放到產品里。
我們也怕被罵啊。
我們是開發者,也是用戶,對這些一啟動就開多個進程,又耗電又殺不掉的app,我們也受不了,但有時候真的沒多少選擇。
一個最簡單的例子,消息推送,企業級的產品很多情況下是設備只能連接內網,不能用手機自有的推送方案(說實話國內這麼多不同的廠家也真不可能分別針對機型集成他們的推送sdk),這時候就要保持一個長連接用於消息的接收,還要保證這個連進程活著,不能被掛起或者結束。
保活就成了一個很噁心卻又不得不做的方案。
我們公司的大領導都是出身技術,現在四十歲還在寫代碼,也是知道這些方案的缺陷的。說實話他們也不喜歡。
但是你想想,給企業做了一款協作軟體,裡面有即時通訊的功能,領導蹲坑的時候發了一條消息說九點半開個小會,到了九點半沒幾個到的,其他人沒收到消息因為進程被結束或者掛起了……
現在這個樣子是最好的,大家都一樣用不了保活,還是回到重新公平競爭的起點。
所有人都做不到,客戶也不會用這個理由來提奇葩的需求。
所以從純粹的技術上來說,失落嗎?失落,因為一個問題擺在那裡無法解決,作為一個程序員多少無法釋懷。
但是作為開發者來說,欣慰嗎?欣慰,因為這麼多年終於看到Android從當年的稚嫩一點點走向成熟了(雖然國內部分廠家的深度定製系統還是有不少坑就是了)
---------------------------------------------------------
關於幾個問題做一下統一回復。
1.國內廠家提供的手機是不是有對進程管理做修改?
應該是,我觀察過我用的比較多的兩家廠商,華為小米,都有對做進程管理做改進。
比如評論中有朋友提到的神隱模式,會讓應用在後台放置一段時間後進程就被掛起(給我感覺有點像是ios,ios現在不是假後台,但是除了配置voip電話、音樂應用等特殊屬性之外,其他應用進後台一段時間後都會被掛起,內存被dump出來,等到重新回到前台才載入回內存)不過國內廠家的這些模式細節處理還不是很完善。
我見過比較奇葩的一個設備,也有類似的內存管理模式,程序進後台之後被掛起,搞笑的是程序恢復成前台之後就失去了網路訪問許可權,必須殺掉重來!!!
廠家名字就不說了。
2.關於安卓開發者是否需要掌握native?
我個人做的是linux c++ 後台和偏向於底層的開發,java層做的比較少,大多出於興趣。但是我個人覺得,安卓開發者起碼要對native要有一定了解。
C++飽受詬病,但多少了解一些能讓你更深入理解android系統。android.jar是如何通過libjavacore.so調用到底層函數的、dalvik 或者art的啟動流程、相關的進程管理模式等等,退一萬步就算你不想知道這些,jni起碼要懂吧。
java做界面,部分核心的數據處理功能,像是圖像、加解密、流媒體這些,直接用C層的開源庫套一層jni的介面,不也很好用?
我面試過5年左右經驗,jni不了解、虛擬機啟動不知道、對android每個版本的變更都說不出幾個點的android開發者。
也面試過2-3年經驗,虛擬機、進程、線程、內存管理、垃圾回收、熱更新各種機制隨手拈來的開發者,據他說的每個版本android的源碼都會粗粗瀏覽一次......(面試完這個小夥子之後我有點腿軟,出去的時候一身汗)
大部分人很難做到像知乎大神一樣大學的時候就能實現資料庫了,但是我覺得不想淪落為純粹為堆代碼的熟練工人,對於系統本身還是應該要有更深入的了解。
這個問題下抖機靈的太多了,實在不能忍。
從4.4到7.0的經歷了三個大版本,中間的行為變更和新增API非常多。不過總體來說,5.0帶來了Material Design設計規範, ART虛擬機以及更好的後台運行方式JobScheduler, 6.0引入運行時許可權機制和指紋身份驗證,7.0提供多窗口支持,JIT/AOT編譯以及後台優化。
這些都屬於非常大的變更和優化了,竟然有人對此視而不見,那我就做一回搬運工好了。
1. Android 5.x的新特色和行為變更
對於普通用戶來說,從5.0開始能夠感受到的最大改變就是Material Design了,Material Design是一整套複雜的設計規範,包含了從視覺,動畫和交互等內容,為了使開發者更好地實踐,Google還提供了support-design library.
對於開發者來說,5.0的另外一個重大變更就是ART虛擬機正式取代Dalvik成為Android系統的默認虛擬機。ART相比Dalvik的優勢主要在於:
1)預先編譯(AOT)
2)改進的垃圾回收機制
3)改進的調試支持
其他的一些改變包括:
1)聲音和振動
如果你當前使用Ringtone、MediaPlayer或Vibrator類向通知中添加聲音或振動,則移除此代碼,以便系統可以在「優先"模式中正確地顯示通知。取代它們的是Notification.Builder.
2)鎖定屏幕可見性
默認情況下,在Android 5.0中,通知現在顯示在用戶的鎖定屏幕上,用戶可以選擇保護敏感信息不被公開,在此情況下,系統會自動刪除通知顯示的文本。要自定義此刪除的通知,請使用setPublicVersion().
3)媒體播放
Notification.MediaStyle取代RemoteViews.RemoteView成為新的媒體播放狀態或傳輸控制項的通知API,另外,從5.0開始系統將不再將RemoteControlClient對象顯示在鎖定屏幕上。
4)浮動通知
當設備處於活動狀態時,通知可以顯示在小型浮動窗口中。
5)getRecentTasks()
Android 5.0中引入新的"並發文檔和Activity任務」功能後,為提升用戶隱私的安全性,現已棄用ActivityManager.getRecentTasks()方法。
6)Android NDK的64位支持
Android 5.0引入了對64位系統的支持。64位可增加地址空間和提升性能,同時仍然完全支持現有的32位應用。64位支持也可改進用於加密的OpenSSL的性能。
7)綁定服務
Context.bindService()方法現在需要顯式Intent,如果提供隱式Intent,將引發異常。
8)多SIM卡支持
Android 5.1添加了對同時使用多個蜂窩運營商SIM卡的支持。可以通過SubscriptionManager類來獲取有關當前激活的SIM卡的信息,包括設備是否被認為在當前網路上漫遊。
9)棄用的HTTP類
Android 5.1中棄用了org.apache.http類和android.net.http.AndroidHttpClient類,這些類將不再保留,應該儘快將使用這些API的代碼修改為使用URLConnection類。不過其實大多數開發者都已經遷移到okhttp了。
10)JobScheduler
在JobScheduler出現之前,我們只能通過AlarmManager定時喚起應用或者監聽廣播的方式來完成某些工作,這種做法的效率很低,甚至需要保活,對於手機電量的浪費很大。為了優化對於電量的使用,Google推出了JobScheduler,它適用於這樣的場景:當你需要在稍後的某個時間點或者當滿足某個特定的條件時執行一個任務,例如當設備接通電源或者連接上Wifi時。
不過需要注意的是國內廠商對於JobScheduler做了很多額外的限制,比如setPeriodic()和setPerist()這兩個屬性在一些國廠手機上的表現就跟預期的不一樣。
另外,Google為了防止應用在後台做太多的事情,從7.0開始對於JobScheduler做了更多的限制,比如setPeriodic()就不再是準確地周期性活動,而是跟其他的一些任務合併進行。
2. Android 6.x的新特色和行為變更
1)運行時許可權
所謂運行時許可權是指用戶可直接在運行時管理應用許可權。而對於開發者來說,就意味著以API 23及以上為目標平台的應用,必須在運行時檢查和請求許可權。
我個人覺得這是Android系統從混亂往有序的一個轉折點,雖然還有很多流氓應用,但是相比之前已經好很多。
2)低電耗模式和應用待機模式
此版本引入了針對空閑設備和應用的最新節能優化技術。具體如下:
- 低電耗模式:如果用戶拔下設備的電源插頭,並在屏幕關閉後的一段時間內使其保持不活動狀態,設備會進入低電耗模式,在該模式下設備會嘗試讓系統保持休眠狀態。在該模式下,設備會定期短時間內恢復正常工作,以便進行應用同步,還可讓系統執行任何掛起的操作
- 應用待機模式:應用待機模式允許系統判定應用在用戶未主動使用它時處於空閑狀態。當用戶有一段時間未觸摸應用時,系統便會作出此判定。如果拔下了設備電源插頭,系統會為其視為空閑的應用停用網路訪問以及暫停同步和作業。
3)取消支持Apache HTTP客戶端
Android 6.0版移除了對Apache HTTP客戶端的支持,轉而改用HttpURLConnection類。此API效率更高,因為它可以通過透明壓縮和響應緩存減少網路使用,並可最大限度降低耗電量。
4)BoringSS
Android正在從使用OpenSSL庫轉向使用BoringSSL庫。如果您要在應用中使用Android NDK,請勿鏈接到並非NDK API組成部分的加密庫,如libcrypto.so和libssl.so,這些庫並非公共API,可能會在不同版本和設備上發生變化或出現故障。此外,還可能讓你暴露在安全漏洞的風險之下。所以請修改為原生代碼,以通過JNI調用Java加密API,或靜態鏈接到您選擇的加密庫。
5)硬體標識符訪問權
為給用戶提供更嚴格的數據保護,此版本開始,對於使用WLAN API和Bluetooth API的應用,Android移除了對設備本地硬體標識符的編程訪問權。WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()方法會返回常量02:00:00:00:00:00.
現在,要通過藍牙和WLAN掃描訪問附近外部設備的硬體標識符,必須擁有ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION許可權;
6)通知
此版本移除了Notification.setLatestEventInfo()方法。請改用Notification.Builder類來構建通知。要重複更新通知,請重複使用Notification.Builder實例。調用build()方法可獲取更新後的Notification實例。
7)音頻管理器變更
不再支持通過AudioManager類直接設置音量或將特定音頻流靜音。setStreamSolo()方法已棄用,應該修改為requestAudioFocus()方法。類似地,setStreamMute()方法也已棄用,要修改為adjustStreamVolume()方法並傳入方向值ADJUST_MUTE或ADJUST_UNMUTE.
8)文本選擇
現在,當用戶在應用中選擇文本時,您可以在一個浮動工具欄中顯示「剪切」、"複製」和"粘貼」等文本選擇操作。如下圖所示:
9)Android密鑰庫變更
此版本開始,Android Keystore Provider不再支持DSA,但仍然支持ECDSA.
10)相機服務變更
在此版本中,相機服務中共享資源的訪問模式已從之前的「先到先得」訪問模式更改為高優先順序進程優先的訪問模式。
11)APK驗證
現在執行的APK驗證更為嚴格,如果在清單中聲明的文件在APK中並不存在,該APK將被視為已損壞。移除任何內容後必須重新簽署APK.
12)指紋身份驗證
此版本提供了一些新的API,在受支持的設備上,用戶只需掃描其指紋即可完成身份驗證,這些API還可與Android Keystore Provider結合使用。
要通過指紋掃描驗證用戶身份,請獲取新FingerprintManager類的實例,並調用authenticate()方法,您的應用必須運行在帶有指紋感測器的兼容設備上。
13)確認憑據
您的應用可以根據用戶在多久之前最後一次解鎖設備來驗證其身份。此功能讓用戶不必費心記憶應用特定密碼,您也無需實現自己的身份驗證用戶界面。您的應用應當利用此功能並結合實現公鑰或私鑰,以進行用戶驗證。
14)應用鏈接
此版本通過提供功能更強大的應用鏈接,增強了Android的intent系統,您可以利用此功能將應用與您擁有的某個Web域關聯。
3. Android 7.x的新特色和行為變更
1)多窗口支持
現在,用戶可以一次在屏幕上打開兩個應用。如下圖所示:
- 在運行Android 7.0的手機和平板電腦上,用戶可以並排運行兩個應用,或者處於分屏模式時一個應用位於另一個應用之上。用戶可以通過拖動兩個應用之間的分隔線來調整應用。
- 在Android TV設備上,應用可以將自身置於畫中畫模式,從而讓它們可以在用戶瀏覽或與其他應用交互時繼續顯示內容。
2)通知增強功能
通知增強包括以下方面:
- 模板更新:我們正在更新通知模板,新強調了人物形象和化身。開發者將能夠充分利用新模板,只需進行少量的代碼調整。
- 消息傳遞樣式自定義:您可以自定義更多與您的使用MessagingStyle類的通知相關的用戶界面標籤。您可以配置消息、會話標題和內容視圖。
- 捆綁通知:系統可以將消息組合在一起(如將消息主題)並顯示組。用戶可以適當地進行拒絕或歸檔等操作。
- 直接回復:對於實時通信應用,Android系統支持內聯回復,以便用戶可以直接在通知界面中快速回復簡訊。
- 自定義視圖:兩個新的API讓您在通知中使用自定義視圖時可以充分利用系統裝飾元素,如通知標題和操作。
3)配置文件指導的JIT/AOT編譯
在Android 7.0中,我們添加了即時(JIT)編譯器,對ART進行代碼分析,讓它可以在應用運行時持續提升Android應用的性能。JIT編譯器對Android運行組件當前的Ahead of Time(AOT)編譯器進行了補充,有助於提升運行時性能,節省存儲空間,加快應用更新和系統更新速度。
4)快速的應用安裝路徑
Android 運行組件的JIT編譯器最實際的好處之一是應用安裝和系統更新的速度。即使在Android 6.0中需要幾分鐘進行優化和安裝的大型應用,現在只需幾秒鐘就可以完成安裝。系統更新也變得更快,因為省去了優化步驟。
5)隨時隨地低電耗模式
Android 6.0推出了低電耗模式,即設備處於空閑狀態時,通過推遲應用的CPU和網路活動以實現省電的系統模式,例如,設備放在桌上或抽屜里時。
現在Android 7.0隻要屏幕關閉了一段時間,且設備未插入電源,低電耗模式就會對應用使用熟悉的CPU和網路限制,這意味著用戶即使將設備放入口袋也可以省電。
6)Project Svelte:後台優化
前面說過,Android 5.0發布了JobScheduler,它已經成為後台工作的首選方式,其工作方式有利於用戶。應用可以在安排作業的同時允許系統基於內存、電源和連接情況進行優化。
另一個非常好的選擇是GCMNetworkManager,其在舊版Android中提供類似的作業安排和兼容性。
在Android 7.0中,我們刪除了三個常用的隱式廣播--CONNECTIVITY_ACTION、ACTION_NEW_PICTURE和ACTION_NEW_VIDEO,因為這些廣播可能會一次喚醒多個應用的後台進行,同時會耗盡內存和電池。
7)SurfaceView
Android 7.0可同步移動到SurfaceView類,此類在某些情況下提供的電池性能優於TextureView:在渲染視頻或3D內容時,包含滾動和動畫視頻位置的應用在使用SufaceView時比TextureView耗電更少。
8)流量節省程序
Android 7.0 擴展了 ConnectivityManager,以便為應用檢索用戶的流量節省程序首選項並監控首選項變更提供一種方式。所有應用均應檢查用戶是否已啟用流量節省程序並努力限制前台和後台流量消耗。
9)VulKan API
Android 7.0將一項新的3D渲染API Vulkan集成到平台中,就像OpenGL ES一樣,Vulkan是3D圖形和渲染的一項開放標準,由Khronos Group維護。
10)快速設置
「快速設置」通常用於直接從通知欄顯示關鍵設置和操作,非常簡單。在 Android 7.0 中,我們已擴展「快速設置」的範圍,使其更加有用更方便。
11)號碼屏蔽和來電過濾
這個大家都很熟悉了,不多解釋。
12)WebView
- Chrome和WebView配合使用
- 多進程
- Javascript在頁面載入之前運行
- 不安全起點上的地理定位
- 測試WebView測試版
13)APK signature scheme v2
Android 7.0引入一項新的應用簽名方案APK Signature Scheme v2, 它能提供更快的應用安裝時間和更多針對未授權APK文件更改的保護。在默認情況下,Android Studio 2.2和Android Plugin for Gradle 2.2會使用APK Signature Scheme v2和傳統簽名方案來簽署您的應用。
14)許可權更改
為了提高私有文件的安全性,面向Android 7.0或更高版本的應用私有目錄被限制訪問(0700).此設置可防止私有文件的元數據泄漏,如它們的大小或存在性。此許可權理性有多重副作用:
- 私有文件許可權不應再由所有者放寬,為使用MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE而進行的此類嘗試將觸發SecurityException;
- 傳遞軟體包網域外的file://URI可能給接收器留下無法訪問的路徑。因此,嘗試傳遞file://URI會觸發FileUriExposedException. 分享私有文件內容的推薦方法是使用FileProvider;
- DownloadManager不再按文件名分享私人存儲的文件 。
15)屏幕綻放
Android 7.0支持用戶設置顯示尺寸,以放大或縮小屏幕上的所有元素,從而提升設備對視力不佳用戶的可訪問性。用戶無法將屏幕縮放至最小屏幕寬度sw320dp,該寬度是Nexus 4的寬度,也是常規中等大小手機的寬度。
我就很不解,這個問題掛著個「Android開發」的標籤在我的time line上刷了一個星期多了,每次點進去都是些技術無關的回答,還有那個高票的「未入門程序員」在說這完全技術無關的囈語。不考慮驅動適配,不考慮預裝軟體的資源佔用,不去研究每次大版本升級到底升級了些什麼,卻去扯大人小孩算數學,有什麼意思? 這個樣子我把Android開發這個標籤去掉行不?關注這個話題不是為了看撕逼和抖機靈的
回答題主和大多數愛好者的問題
以下鏈接中附帶了Android開發官網上每個版本對於API的變更,現在Android Developers官網已經有中文翻譯了,各位可以直接點進去看。
Android系統的每次大版本升級都伴隨著Google對一系列機制的優化,比如內存佔用,應用程序的運行機制,這些你們表面上是看不到的,我隨便舉幾個例子
傳統的一些進程保活機制,比如多個進程相互守護,在2.x版本上可以生效,到了最近幾個版本Google修改了進程管理模式之後,就算相互守護也肯定會被用戶殺掉。
Android4.4,ART機制加入,提高應用程序的運行速度,同時由於一系列優化,Android 4.4 相比於之前版本反而降低了系統硬體要求
https://developer.android.com/about/versions/android-4.4.html
Android 5.x版本,繼續優化了ART機制,5.0以後Android提供了系統級的Material Design支持,也就是說類似於點擊的漣漪效果,使用原生控制項在5.0以後就會看到。
https://developer.android.com/about/versions/android-5.0.html
文檔中沒有提及,但我在實際項目中發現的是5.0對於應用後台許可權進一步縮緊,一個應用想通過getRunningTask的方式獲取應用進程信息已經不可行,必須通過許可權申請(具體我記得不是很清楚)
Android 6.x版本,動態許可權機制加入,doze模式加入,優化電量管理,同時對應用程序使用在Native能做的事情做了更多限制。
https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
7.x版本,除了正常提及的優化外,Google修復了通過創建notification並立即cancel達到創建一個隱藏的前台進程的bug,這也是為什麼很多用戶更新到7.x之後,會看到通知欄上有一堆「xxx 正在運行…」這樣無法取消的通知,因為原來被cancel掉的通知現在無法cancel了
https://developer.android.com/about/versions/nougat/android-7.0-changes.html
即將出來的Android O,更多限制,而且即將對一片混亂的推送開刀。
可以看到為什麼很多人覺得升級系統之後運行快了,除了一些大的優化之外,也是因為Android後台,隨著版本升級正在從蠻荒走向秩序,容易被惡意利用的bug不斷被修復
Android版本升級,不考慮預裝軟體的因素,肯定是會讓你的使用體驗越來越好
作為在相同配置的設備上(1G,這個配置應該最能體現出不同系統版本之間的區別了)開發過基於Android 4.4(API 19)和Android 7.0(API 24)應用,應該算是最有資格回答這個問題了。我主要從開發者的視角、用戶體驗的角度來說一下自己這兩個系統之間的區別。
首先有必要說明一下,這個問題不能是單獨對比不同Android系統版本之間的區別,還要考慮到開發者素質在變化這一因素。一個是13年的版本,另外一個是16年的版本,這個過程中Android的系統在進化,開發者的素質同樣在進化,個人認為作為應用開發人員,終極目標是開發優秀用戶體驗的應用,同一個程序,做完跟做好是天差地別,也是體現開發經驗、素質和能力的一個重要參考指標。13年的時候提升應用性能的手段有限(Android並沒有提供足夠多、趁手的性能檢測工具)、開發的大環境沒有現在好、目標和現在不同(13年更多的是快速佔領市場),但到了今天,性能和體驗差的應用會被市場淘汰掉、用戶越來越挑、競爭對手越來越多、Android平台的工具和資源越來越豐富和成熟,各種因素「逼」著開發者在進步,可以說是不可同日而語了。
就在相同配置下,同一個應用(肯定不是絕對相同,這個過程中應用本身也做了很大力度的優化)在Android 4.4和Android 7.0的表現來看,能感受到的區別有:
- 應用啟動速度:尤其是應用的冷啟動速度,改善明顯,從測試反饋的結果來看,從點擊桌面圖標到跑應用自己的Application這段時間明顯縮短了,這是實打實的用戶體驗提升;
- 流暢度:這個也是感受最明顯的地方,通過幀率檢測以及測試反饋,7.0的流暢度會比4.4好很多;
- 功耗問題:這個是感受最深刻的地方了,包括我也在5.1上做過應用開發,從Android 6.0開始,關於整機功耗問題是質的飛躍;
- API效率:首先是棄用了很多API,使用更高效的API做了替換;有的是直接改善了API的耗時問題,比如AnimationDrawable;有的是使用新的技術解決方案,比如自定義字體(從Typeface轉到使用資源文件載入字體了,support包可支持);
從近幾年的Google IO也可以看得出來,從Android 6.0開始,到Android 8.0,Google著重在改善Android系統的用戶體驗,包括但不限於:
- Android系統性能的改善,著重優化了後台和系統流暢度;
- 幫助Android應用開發者改善應用性能問題,提供了豐富的性能檢測工具,比如開發者選項、DDMS、Android Monitor(Android Profiler)、batteryhistorian等,並且在Youtube上推出了Android Performance Patterns專題,100多個小視頻幫助應用開發者提升應用的性能和體驗;
- Android的安全問題的改善;
- 模塊化,包括MVP、MVVM、Instant App以及今年推出的應用開發框架。
受限於個人視野和能力問題,這些觀點只是個人意見,陳述一下從應用開發者的角度看到這兩個系統之間的變化,不足之處懇請多多指導。
首先題主不是來問問而是來印證或者反證自己的想法的,通俗來說就是釣魚。
不過我還是打算回答一下這個問題。
如果現在拿出一部在2013年賣2000元的手機刷上安卓7.0,和一部2017年賣2000元的手機刷上安卓4.4,哪個哪個會運行的更流暢?
1.假如刷上了安卓4.4的2017年的手機更流暢,那是不是說這些年安卓系統升級用處不大?
2.假如刷上了安卓7.0的2013年的手機更流暢,那是不是說這些年硬體的發展並沒有卵用?
題主的邏輯非常混亂,以至於我看了好久都不知道題主到底是怎麼從「假如」到「那麼」的。
我們先假設題主說的2013年2000元的手機和2017年的2000元的手機是為了表示同等價位的硬體。
題主的假設有兩台手機,一是四年前的安卓刷上了7.0,二是今年的手機刷成了4.4。
題主的結論中有提到兩個方面,一是安卓系統升級的作用,二是安卓手機硬體的發展的作用。
我們再增加兩台手機,一個是四年前運行4.4的2000元安卓機,一台是今年運行著安卓7.0的2000元安卓機。為了描述方便,後面我將用四年前的7.0代表【刷上了安卓7.0的2013年的手機】,其他的類似。
我們先忽略14年的硬體條件(包括但不限於內存,屏幕,CPU等等)能不能讓7.0的安卓系統展現自己的優勢,就都像題主潛在的假設,都沒有問題。
我們可以說,如果四年前的4.4不如四年前的7.0流暢,因為系統升級帶來了很多好處;
我們也可以說,如果拿四年前的手機和現在的都來運行4.4(7.0),發現2017的手機倍兒棒,所以得出結論系統硬體發展帶來了很多好處。
橫向比較有結論,縱向比較也有結論,題主突然說:
1.假如刷上了安卓4.4的2017年的手機更流暢,那是不是說這些年安卓系統升級用處不大?
2.假如刷上了安卓7.0的2013年的手機更流暢,那是不是說這些年硬體的發展並沒有卵用?
不行,我得舉個好例子。我想想...
假設小明四年前1.4米,顏值3分,眾人默默點了差評;
現在小明2.2米,顏值9分,吃瓜群眾默默給了好評;
一般人:相比四年前,小明長高了,用戶體驗更好了;抑或是,小明長好看了,使用體驗更好了。
題主:
假如小A有四年前的小明1.4米的硬體水平加上現在9分的顏值作為軟體水平,小B有小明現在的2.2米硬體水平和四年前3分的顏值作為軟體水平;
如果你覺得小A好一些,那就意味著小明這四年硬體長到了2.2米白長了?
如果你覺得小B好一點,那是不是意味著小明這張臉白長好看了?
可恥地匿了。模仿一句邏輯不對的話還要想比喻好累啊,自己讀著都尷尬...
其實一句話可以講清楚:已知A&
能推出個屁的結論啊。
越是化簡越覺得不能理解題主這個結論怎麼推過來的。
不行,我再嘗試一下,從高中物理常用的角度來說。控值變數沒有做好。題主比較的兩個東西中,包含了兩個變數。一個.....................
我放棄了。
幾乎所有人都小看了iPhone的CPU性能。我這裡先不討論GPU,只討論CPU。
iPhone的CPU性能可以用恐怖來形容。以iPhone7(雙核)為例子,單線程3500,多線程6000。三星S8(八核),單線程1950,多線程6500。華為mate9(八核),單線程1900,多線程6500。OPPO R9(八核)。單線程850,多線程3500。大家注意,iPhone7的單線程性能,幾乎已經打平了OPPO R9的八核全開性能。即使是三星的八核頂級CPU,多線程不過也就略強於iPhone7的A10雙核。我打一個比方:一個人能舉起500斤的東西,那叫特異功能,八個人合力舉起500斤的東西,沒什麼好奇怪的。iPhone的單核性能決定了iPhone有特異功能(也就是神流暢)。單核性能是非常難提升的,單核強本身就是黑科技,單核性能比多核性能重要很多。安卓從4.4到7.0經歷了3次改進。4.4本身有個黃油計劃,5.0有了新的ART虛擬機,6.0解決內存溢出問題,7.0又改進了ART虛擬機。安卓整體流暢度確實是提高了,iPhone流暢度也確實下降了。但要保持同一個基準來比較。OPPO R9這種被蘋果單核秒八核的旗艦機是肯定拿不上檯面的。如果都用旗艦機來比較,三星S8和iPhone7流暢度的差距,肯定是小於三星S2和iPhone4s流暢度的差距的(並且三星S2與4s的性能差距小於S8與iPhone7的性能差距),這點毫無疑問。最終引入:「蘋果硬體提升比安卓快,安卓4.4到安卓7.0依靠自身系統優化,在硬體劣勢的情況下依然與ios拉小了流暢度差距。」這一結論。足見安卓4.4到安卓7.0還是有不小提升的。
如果你認真看過每年的 Google I/O,會發現 Google 每年都在優化編譯器和解釋器。就最近的一次 Android O 的發布會來說,Google 依靠 Android N 上啟用的 profile-guided JIT 對內存以及編譯器進行了更深的優化。
理論上來說,Android 的系統版本越高,運行效率也就越高。從我自己的設備來說,運行 Android N 的 Nexus 比 Android M 的稍快(但不明顯)。
另外你忽略了一點,隨著時間的推進,系統和軟體會越來越複雜(舉個很簡單的例子,微信剛開始除了聊天基本上就沒啥其他功能,而現在什麼亂七八糟的都有,支付、新聞、小程序等等),所以有時候優化相對於增加的複雜性來說顯得微不足道。
某天你翻出一部不知道多少年前的老手機,隨手一搜竟然有人家做的7.1的rom(因為官方升級大多數出的很慢或者並不純凈)。刷之前你會幻想這手機估計是廢了,如果太慢大不了我扔了。刷之後你會感慨,這xx真是之前那部快報廢的手機嗎?Android每一次大升級都帶來速度的提升,是真的在升級。不像.....嗯
32=923=8朋友,你知道控制變數法嗎,只能有一個變數啊
題主,android升級的具體內容有很多回答了。我來糾正下你的邏輯錯誤。
首先,新老軟體和新老硬體,可以組成一個矩陣,分為四個元素,作一下標記:
1.s0h0 老軟體+老硬體
2.s1h0 新軟體+老硬體
3.s0h1 老軟體+新硬體
4.s1h1 新軟體+新硬體
你對比的是2和3,也就是s1h0和s0h1,這個對比的結果並不是你所說的軟體升級沒有用vs硬體升級沒有用。我列一下不同對比的邏輯含義你就知道了:
s0h0 vs s1h0 : 軟體升級是否有用
s0h0 vs s0h1 : 硬體升級是否有用
而你對比的s1h0 vs s0h1 : 軟體升級和硬體升級哪個更有用(含負作用)。
android 4到7是我長這麼大見過的唯一一個真的版本越高速度越快的系統
毫無疑問,2017年的快。4.4到7.0再牛逼也彌補不了cpu,gpu好幾倍,io更是10倍以上的差距。手持小米4c,有5.1-7.1,差距明顯。4.4到5.1是一個飛躍,5.1到6.0又是一個飛躍。前者默認啟用art(效率飛躍),後者有了doze等一系列功能(體驗飛躍)。
你這樣不對啊。從初中學科學起就知道的一個點,叫做控制變數。
假如你拿2台17年的手機,比如米六吧。一個安卓7,一個安卓4。但是兩個功能都是不一樣的。比如說,7裡面支持了64位,好像我記得4.1還不支持64位的。這是要安卓和手機互相搭配,相輔相成的。我當年用4C的時候,用的安卓5.1(好像是這個),今年年後更新了安卓7,我感覺流暢了很多,確實是安卓的優化,但是在沒有高硬體的情況下,比如,我的手機只有1G 內存,那麼比如帶動了系統,帶不動一個QQ,各種殺後台,用著也不舒服。我個人認為:首先要高配置,再去談系統上的問題。還有一個例子,就是當時好像是OPPO R9(經過指正,我應該是記錯了,應該是R7S那件事)的安卓4.4上的問題,好像就是過年那段時間,說不更新安卓6以上的系統。導致電話信號還是什麼問題,我忘記了。反正就是說,32位有些東西不支持。假如拿安卓5.1來比比,可能還可以和安卓7打一下。只是功能上的缺失。額,聽評論區的說之前OPPO 是安卓5.1的。難道我記錯了?是R7S的有問題嗎?反正應該可以找到新聞,有心人可以去找,我不是很想找。因為現在好像也沒有這種問題了。
不過想要說明的是:手機或者電腦都是,好硬體+好軟體=好電腦(垃圾佬走開!我不撿垃圾)題主這種方法是,不太可靠的。
哦對。還有一個例子,小米2s,現在刷最新包還是很流暢呢。所以安卓系統升級還是很必要的。兼容的應用程序越來越少。4.4玩的是遊戲,上承4.0,下啟5.0,基本上所有新老遊戲都能順利運行。5.0玩的是應用,基本上所有好用的32位老程序都還能兼容,流暢性比4.4又有提升。6.0、7.0玩的就是新功能新特性和流暢度了,比如分屏、比如更快的應用安裝速度。系統底層越來越流暢是沒錯的,但流暢度還取決於硬體和第三方的優化,與提升的一點點流暢度相比我還是更關注安卓的小眾應用和開放性玩法能不能得到承續。
謝邀。
小的時候你做一道乘法運算題的時間,長大可以做一道化學方程式配平。小的時候你做一道小學應用題的時間,長大你可以做一道幾何題。晶元的計算能力發展與人的成長很相似,而人學習的知識也與軟體的迭代非常的相似。而題主的比喻猶如高中考試和小學考試同樣是一場考試時間,即使交出相同的卷面分數相同,但不可能得出這麼多年的學習沒有任何進步,或者這麼多年的智商都白增長了類似的結論。
我想題主應該聽過一句話叫好馬配好鞍。Android操作系統的迭代本質上就是不斷為更好的「馬」打造更好的「鞍」。 安迪—比爾定律實際上就是晶元與軟體行業的「好馬配好鞍」定律。
最後順便回答一下:
如果現在拿出一部在2013年賣2000元的手機刷上安卓7.0,和一部2017年賣2000元的手機刷上安卓4.4,哪個哪個會運行的更流暢?
2017年的硬體運行4.4會更快:就像讓智商發展成熟的大人運算1+1,一定比智商未完全發育小孩快。
另外2013年的手機運行7.0(如果驅動允許),就像智商未完全發育的小孩強行學習高中方程式,未必學不會,但是肯定很痛苦(就像很卡)。
寫給某些答主:抖機靈和合理的比喻千差萬別。用合理的比喻去敘述一件您用技術細節說的又長又臭還說不清的答案,不比您靠中傷他人來積攢強得多嗎?
我的三星Note2,刷了7.1.2。系統感覺明顯流暢了,而且ROM包只有300M左右(原廠ROM包1G多)玩真實賽車都很流暢,原來安卓4x的時候也可以不過發熱厲害。┄┄┄┄┄┄┄┄┄更新┄┄┄┄┄┄┄┄刷機包下載:https://www.androidfilehost.com/?fid=673368273298948858↑這個刷機包不好,網站里搜n7100可以找到其他刷機包。這是國外網站下載,有更新就在這裡下載,不過很慢。
好一個矛盾的問題。。
當年4.4的手機官方不給7.0。
如今的7.0手機也不需要4.4。
你認為4.4變化到7.0沒有任何意義的話。那麼4.4也沒啥意義。為啥不用2.3呢。2.3也沒意義。用塞班啊,現在的手機跑java還能差?你可能說java的遊戲畫質太垃圾了。
對啊,7.0遊戲畫質就是好。我是Android吧的小吧主,看過很多關於購買手機和系統對比的帖子,總結出了以下幾個點。
沒讀啥書,寫得不清楚請諒解。
純屬個人看法和心得,看的不爽、不服,不認同的,請來跟我懟過。《新系統沒用》
總是有一些人,整天發一些帖子說,Android更新6.0啦7.0啦,然而沒什麼用,該卡還是卡,沒用兩天就卡的言論,我一般看到直接禁言他幾天,我再在下面發表我的看法和心得,最後再加上一句《樓主還有什麼不清楚的可以在下面提問》,然後他又不能繼續跟我懟,看他氣憤 又弄不了我的樣子就很開心。並不是我手握一點權利就霸道欺壓老百姓,只是在我眼裡看來,智商低於100的都不應該在網上發表評論。除了看著礙眼睛之外,還容易讓大眾對真實真相造成誤解。
根據我在貼吧看了很多的帖子,總結出來這種人一般都是手握2015年之前的低配置手機,加上他們的手機廠商優化不夠,導致他們認為手機不流暢,就覺得全世界的Android手機都不流暢,或者是看過某些黑子大神寫了一些讓腦殘分別不出是對是錯的文章就覺得自己很牛逼,也跟著來噴的人。用著mtk晶元的低能8核手機,來噴Android都8核10核了還是卡,然而那些SB根本不知道mtk的單核性能有多差
然後又搬出iOS怎麼怎麼流暢,說iOS才雙核,1g ram內存就流暢得飛起。
然而他們並不知道ios的單核性能有多強。內存的管理機制是什麼。我不太清楚4.0和7.0的區別,我也不是開發者程序員。
不過對安卓升級有過一次直觀感受。就是曾經用S4的時候系統從4.4升級到5.0。本來4.4的時候 我的手機用了快兩年已經非常卡了。沒錢苦熬了幾個月,終於等到推送5.0,抱著試一試心態升級。結果確實流程了很多,我指的不是掉幀,是那種卡頓現象明顯的提升了很多。不過沒堅持多久就摔碎了屏無法開機,隨後換了蘋果6SP- - 最近又在換機,看來看去,比較中意S8,蘋果目前諜照來看....今年新機是不符合我的審美的。憂鬱的是換S8還是note8從隱藏的遊戲來看
安卓4是個不知道是啥來回亂動的方塊安卓5是個要怎麼也過不去摔手機的飛翔的小機器人安卓6是個不摔手機了可以多人的飛翔的機器人安卓7除了機器人多了擼貓!哈哈哈哈哈沒事擼只貓開發者是越來越無聊了╮(︶﹏︶)╭推薦閱讀:
※一加手機為什麼比鎚子手機銷量高那麼多?
※你為什麼用 Android 手機而非 iPhone?
※有哪些適合日常使用的理財、記賬軟體?