為什麼安卓不能優化
① 安卓發展至今真的還不如ios流暢嗎你怎麼看
安卓前幾年的流暢度的確不能跟ios比,但是經過這幾年安卓持續的優化,在流暢度方面已經取得了很大的進步了。但是我覺得無論安卓再怎麼優化,特別是動畫過渡方面依然比不過ios。根本原因是安卓和IOS系統的根本原因,即安卓會在點擊時先判斷然後執行動畫,而IOS會先執行動畫,無論你點擊什麼。
蘋果跟安卓的晶元性能差距太大。
首先,這與手機的處理器和配置密切相關。處理器相當於手機的大腦。有了一個好的手機處理器,手機上的用戶體驗將大大提高。現在在安卓手機市場上,滿是100元和1000元的機器,而這些低成本的手機最有可能被卡住。它的處理器性能不夠,內存不夠。當然,我們不能攜帶數百元或1000元以上的手機,所以我們要求它們像6000或7000個蘋果一樣柔軟。
② 為什麼安卓系統的手機優化不流暢
安卓手機預安裝軟體多很多廠商生產的安卓手機內置了許多預安裝軟體,這就導致經常看到,剛買的手機上標示的手機內存很大,但是卻已經使用了很大的一部分,能使用的實際內存是很小的。
③ 都說IOS系統優化的好,為什麼安卓不能優化呢
沒有說不能優化啊,像Cyanogenmod,MIUI,魅族的Flyme OS,等等都是基於安卓的優化而生成的衍生版。他們都不同程度上對安卓進行了優化,也就是為什麼第三方ROM能夠生存的原因,因為很多手機廠商在系統優化不給力,給了第三方ROM團隊發展的條件。所謂有需求就有市場嘛。
至於iOS優化比安卓要好,這個通俗的講就是天資的問題了,谷歌做系統要兼容市面上五花八門的硬體,蘋果軟硬體都是自己在搞,一定程度上決定了iOS要比安卓在底層優化要更優秀,因此即使安卓在經過優化後相比iOS有差距的原因。
還有個更重要的原因就是多任務,iOS一直到4才出現多任務,而且是偽多任務(現在還是),這和安卓在剛推出時就支持多任務(真正的多任務)是有差距的,任務多自然壓力大,也就要犧牲特效了,那些種類繁多的桌面小插件就更不用說了。
全部一個一個字自己打的,看得懂不
④ 為什麼安卓用一段時間就會卡,安卓和蘋果的區別在哪裡
Android手機並不能做到手機所能做到的所有事情。我現在要說的是。因為Android手機不能做手機能做的所有事情,所以這個應用程序並沒有針對Android手機進行優化。例如,對於全屏應用程序來說,它不能正確呈現,或者當孩子長大後,它不能讓你選擇他的照片。對我來說,這不是「做應用程序需要你做的事情」的問題。iPhone是一個圖標密集型移動操作系統,需要數百個應用程序才能正確呈現。它甚至還有一個「iPhone」圖標。因此,當我們告訴某人如何「使用手機和播放音樂」時,他們不會理解這一點,因為Android手機就在其中。他們很難理解「iPhone」應用程序和「Android」應用程序的區別。有些人仍然感到困惑,但這仍然很容易理解。
讓我們來看看移動操作系統、Android以及操作系統可以做的事情。谷歌搜索結果頁面顯示你的結果與「應用程序」,或應用程序將是最受歡迎的應用程序,而不是「其他」谷歌搜索。選擇安卓就是因為這個原因。
有幾次,在我看來,當人們問「你想要什麼應用程序?」而「這個軟體運行什麼應用程序?」則排在谷歌搜索結果的首位時,我感到很沮喪。當你有疑問的時候,問它。你可能認為Android是為「運行在Android上的軟體」而設計的,但是Android僅僅是為了製作使用iOS功能的簡單用戶信息應用。
種風格的問題在於兩者之間有很大的區別。這款手機的Android設計與iPhone和Android手機有明顯區別,iOS設計則沒有。這款手機在所有這些方面都不那麼清晰,也沒有佔用太多的數據空間,因此沒有多少不同的應用程序可以在上面使用。這兩種風格的問題在於,在一個普通的操作系統上,Android需要越來越復雜。你不能控制你所有的行為。在iOS上,只有當你打開一個呼叫按鈕讓手機上的用戶採取行動時,用戶界面才知道。在Android上,如果你打開兩個或更多的電話來做某事,這同樣適用。
⑤ Android App內存優化
內存優化就是對內存問題的一個預防和解決,做內存優化能讓應用掛得少、活得好和活得久。
掛的少:
「掛」指的是 Crash,內存問題導致 Crash 的具體表現就是內存溢出異常 OOM。
活得好:
活得好指的是使用流暢,Android 中造成界面卡頓的原因有很多種,其中一種就是由內存問題引起的。內存問題之所以會影響到界面流暢度,是因為垃圾回收(GC,Garbage Collection),在 GC 時,所有線程都要停止,包括主線程,當 GC 和繪制界面的操作同時觸發時,繪制的執行就會被擱置,導致掉幀,也就是界面卡頓。
活得久:
活得久指的是我們的應用在後台運行時不會被幹掉。Android 會按照特定的機制清理進程,清理進程時優先會考慮清理後台進程。清理進程的機制就是LowMemoryKiller。在 Android 中不同的進程有著不同的優先順序,當兩個進程的優先順序相同時,低殺會優先考慮幹掉消耗內存更多的進程。也就是如果我們應用佔用的內存比其他應用少,並且處於後台時,我們的應用能在後台活下來,這也是內存優化為我們應用帶來競爭力的一個直接體現。
內存佔用是否越少越好?
當系統 內存充足 的時候,我們可以多用 一些獲得更好的性能。當系統 內存不足 的時候,我們希望可以做到 」用時分配,及時釋放「。內存優化並不能一刀切。
我們都知道,應用程序的內存分配和垃圾回收都是由Android虛擬機完成的,在Android 5.0以下,使用的是Dalvik虛擬機,5.0及以上,則使用的是ART虛擬機。
Android虛擬機Dalvik和ART
1、內存區域劃分
詳細請看以下兩篇文章(建議全看):
java內存四大區_JVM內存區域劃分
Android 內存機制
2、內存回收
垃圾收集的標記演算法(找到垃圾):
垃圾收集演算法(回收垃圾):
引用類型:強引用、軟引用、弱引用、虛引用
對象的有效性=可達性+引用類型
JAVA垃圾回收機制-史上最容易理解看這一篇就夠了
Android:玩轉垃圾回收機制與分代回收策略
android中還存在低殺機制,這種情況屬於系統整機內存不足,直接把應用進程殺掉的情況。
Android後台殺死系列:LowMemoryKiller原理
1、內存溢出
系統會給每個App分配內存空間也就是heap size值,當app佔用的內存加上申請的內存超過這個系統分配的內存限額,最終導致OOM(OutOfMemory)使程序崩潰。
通過命令 getprop |grep dalvik.vm.heapsize 可以獲取系統允許的最大
注意:在設置了heapgrowthlimit的狀況下,單個進程可用最大內存為heapgrowthlimit值。在android開發中,若是要使用大堆,須要在manifest中指定android:largeHeap為true,這樣dvm heap最大可達heapsize。
關於heapsize & heapgrowthlimit
2、內存泄漏
Android系統虛擬機的垃圾回收是通過虛擬機GC機制來實現的。GC會選擇一些還存活的對象作為內存遍歷的根節點GC Roots,通過對GC Roots的可達性來判斷是否需要回收。內存泄漏就是 在當前應用周期內不再使用的對象被GC Roots引用,造成該對象無法被系統回收,以致該對象在堆中所佔用的內存單元無法被釋放而造成內存空間浪費,使實際可使用內存變小。簡言之,就是 對象被持有導致無法釋放或不能按照對象正常的生命周期進行釋放。
Android常見內存泄漏匯總
3、內存抖動
指的是在短時間內大量的新對象被實例化,運行時可能無法承載這樣的內存分配,在這種情況下就會導致垃圾回收事件被大量調用,影響到應用程序的UI和整體性能,最終可能導致卡頓和OOM。
常見情況:在一些被頻繁調用的方法內不斷地創建對象。例如在View 的onDraw方法內new 一些新的對象。
注意內存抖動也會導致 OOM,主要原因有如下兩點:
1、Android Studio Profiler
作用
優點
內存抖動問題處理實戰
理解內存抖動的概念的話,我們就能明白只要能找到抖動過程中所產生的對象及其調用棧,我們就能解決問題,剛好Android Studio 的Porfiler裡面的Memory工具就能幫我們記錄下我們操作過程中或靜止界面所產生的新對象,並且能清晰看到這些對象的調用棧。
選擇Profile 中 的Memory ,選擇 Record Java/Kotlin allocations,再點擊Record開始記錄, Record Java/Kotlin allocations 選項會記錄下新增的對象。
操作完成之後,點擊如圖所示的紅腦按鈕,停止記錄。
停止記錄後,我們就可以排序(點擊 Allocations可以排序)看看哪些對象或基本類型在短時間被頻繁創建多個,點擊這些新增的對象就可以看到它的完成的調用鏈了,進而就找找到導致內存抖動的地方在哪裡了。
2、利用DDMS 和 MAT(Memory Analyzer tool)來分析內存泄漏
我們利用工具進行內存泄漏分析主要是用對比法:
a.先打開正常界面,不做任何操作,先抓取一開始的堆文件。
b.一頓胡亂操作,回到原來操作前的界面。主動觸發一兩次GC,過10秒再抓取第二次堆文件。
c.通過工具對比,獲取胡亂操作後新增的對象,然後分析這些新增的對象。
DDMS作用:抓取堆文件,主動觸發GC。(其實也是可以用Android Studio 的Profile裡面的Memory工具來抓取堆文件的,但是我這邊在利用Profile 主動觸發gc 的時候會導致程序奔潰,也不知道是不是手機的問題,所以沒用Android Studio的Profiler)
MAT作用:對堆文件進行對比,找到多出的對象,找到對象的強引用調用鏈。
以下是詳細的過程:
步驟1.打開DDMS,選擇需要調試的應用,打開初始界面,點擊下圖的圖標(Dump Hprof File)先獲取一次堆文件。
步驟2.對應用隨便操作後,回到一開始的界面,先多觸發幾次GC ,點擊下圖的圖標(Cause Gc)來主動觸發GC,然後再次點擊 Dump Hprof File 圖標來獲取堆文件。
步驟3.通過Android Studio Profile 或者 DDMS mp 的堆文件無法在MAT 打開,需要藉助android sdk包下的一個工具hprof-conv.exe來轉換。
格式為 hprof-conv 舊文件路徑名 要轉換的名稱;
例如:hprof-conv 2022-04-13_17-54-40_827.hprof change.hprof
步驟4.把兩份堆文件導入MAT,然後選擇其中第二次獲取的堆文件,點擊 如圖所示的 Histogram查看。
步驟5.點擊下圖圖標,Compare To Another Heap Dump ,選擇另一份堆文件。
6.會得出下圖所示的 Hitogram 展示,我們主要看Objects 這一列。 如下圖所示 「+ 2」 則代表前面兩份堆文件對比,這個對象多了兩個,我們主要就是要分析這些多了出來,沒有被回收的對象。
7.加入我們從增加的對象中,看到了MainActivity ,則需要從一開始打開的Hitogram 展示裡面找到這個對象的調用棧。如下圖所示,搜索MainActivity
8.看到下圖所示解僱,然後滑鼠右鍵點擊下圖紅色圈圈著的MainActivity ,選擇 Merger Shortest Paths to Gc Roots ,再選擇 exclude all phantom/weak/soft etc.references ,就可以看到這個MainActivity 對象的強引用鏈,至此我們就可以找到MainActivity對象是被什麼引用導致無法回收了。
3、內存泄露檢測神器之LeakCanary(線下集成)
自行學習了解,接入簡單,使用簡單,基本可以解決大部分內存泄漏問題。
github地址 : https://github.com/square/leakcanary/
學習地址 : https://square.github.io/leakcanary/changelog/#version-22-2020-02-05
針對內存抖動的建議:
針對內存泄漏問題的建議:
針對內存溢出問題的建議(主要就是要減少內存佔用):
建議參考:
深入探索 Android 內存優化(煉獄級別)
對於 優化的大方向,我們應該優先去做見效快的地方,主要有以下三部分:內存泄漏、內存抖動、Bitmap。完善監控機制也是我們的重點,能幫助我們對內存問題快速分析和處理。
參考:
深入探索 Android 內存優化(煉獄級別)
⑥ Android 13開始測試了,為啥安卓越優化越平庸
雖然相當一部分用戶還在使用Android 9、Android 10,谷歌的Android 12L也沒有正式發布,但「後浪」Android 13已經來了。2月11日,谷歌放出了Android 13的第一個開發者預覽版,並把穩定版定檔在4個月以後。
毫無疑問,Android 13的消息讓一眾安卓機友感到驚訝,大家的反應集中在「Android 12還沒用上,13怎麼來了」,並質疑谷歌又在「刷版本號了」。不過,如果了解谷歌以往的發布節奏的話不難發現,2月份發布開發者預覽版其實屬於常規操作。Android 11、Android 12的首個開發者預覽版都是在2月份放出的。
不過,上述風評可能是安卓系統體驗割裂的現象之一,似乎原生安卓在用戶的感知中正在走向平庸和雞肋。
Ps.國內一加9和一加9 Pro曾放出升級原生Android的官方教程。目前一加9系列優惠當中,老用戶有限量版的一加T恤贈送,點擊下方鏈接可以查看你的優惠額度>>
01 Android 13,沒有升級的升級
相較上一代,Android 12帶來了「Material You」功能,用戶可以根據壁紙顏色深度調整系統外觀,整體風格更加個性化和多樣化,此外便是有關攝像頭、麥克風等隱私項目的調整。Android 13在Android 12的基礎上進一步加深了「Material You」和隱私這兩方面內容。你也可以說,Android 13就是Android 12的一個補丁。
Android 13把隱私和安全作為升級的核心,推出了一個照片選擇器和一個新的Wi-Fi許可權。照片選擇器限制了應用讀取相冊的行為,用戶可以允許應用僅讀取部分照片。而新Wi-Fi許可權推出後,保證了那些僅需要連接Wi-Fi的設備,在建立鏈接後不必再暴露位置。
此外,「Material You」功能不再只面向谷歌的第一方應用,所有第三方應用現在都可以根據谷歌的要求進行適配。不過,適配僅支持應用圖標,應用內界面無法改變。
02 為啥安卓用戶升級慢
安卓連續兩代的升級重點,在用戶當中的感知都不高,與其說是用戶慢了,不如說是谷歌慢了。
國內的廠商普遍都會根據安卓新版本作定製開發獨立的UI系統。這兩年就有讓人眼前一亮的Origin OS,極具口碑的Color OS、Magic UI、Flyme,小米的MIUI雖然正在遭遇口碑滑鐵盧,但也是小米公司的第一款產品,跟小米手機一樣走過了10年的發展。
這些定製系統相比原版安卓都有鮮明的特點,也就是極其貼合用戶的使用場景。小到 游戲 中接聽電話,小窗回復信息,快捷打開 健康 寶;大到與電腦設備協同互聯,作為家居管理的中樞和隱私管理。手機廠商顯然比谷歌更懂得用戶需要什麼。
尤其是這兩年,谷歌的升級更偏向於為開發者授權,提供API,方便第三方魔改。而對於手機廠商,手機系統的戰略地位愈發凸顯,成為串聯硬體生態的軟實力。谷歌更像是一個開源系統的維護者的角色,而手機廠商毫無疑問是真正的開發者。
03 谷歌加快補短板
谷歌似乎也意識到了類似的問題,Android 13的升級更注重應用的兼容性,比如讓更多的Android系統功能可以通過Google Play更新,並針對平板電腦、可折疊設備和Chromebook進行優化。這些調整可以在安卓平台上帶來更一致的使用體驗。
另外,谷歌也在向蘋果學習, CES 2022上,谷歌介紹了「Better Together」計劃,旨在通過與廠商、開發者合作,給安卓用戶帶來類似蘋果生態的體驗,比如隔空傳送、設備接力等等。而這些功能,手機廠商已經部分實現了。
如果你想要體驗最新的Android 13,只需將官方的系統映像下載並刷入Pixel 6 Pro / 6 / 5a 5G / 5 / 4a (5G) / 4a / 4 XL / 4設備。或者使用Android模擬器的平板電腦或可折疊設備配置。