android系統優化
㈠ Android性能優化總結
常用的Android性能優化方法:
一、布局優化:
1)盡量減少布局文件的層級。
層級少了,繪制的工作量也就少了,性能自然提高。
2)布局重用 <include標簽>
3)按需載入:使用ViewStub,它繼承自View,一種輕量級控制項,本身不參與任何的布局和繪制過程。他的layout參數里添加一個替換的布局文件,當它通過setVisibility或者inflate方法載入後,它就會被內部布局替換掉。
二、繪制優化:
基於onDraw會被調用多次,該方法內要避免兩類操作:
1)創建新的局部對象,導致大量垃圾對象的產生,從而導致頻繁的gc,降低程序的執行效率。
2)不要做耗時操作,搶CPU時間片,造成繪制很卡不流暢。
三、內存泄漏優化:
1)靜態變數導致內存泄漏 比較明顯
2)單例模式導致的內存泄漏 單例無法被垃圾回收,它持有的任何對象的引用都會導致該對象不會被gc。
3)屬性動畫導致內存泄漏 無限循環動畫,在activity中播放,但是onDestroy時沒有停止的話,動畫會一直播放下去,view被動畫持有,activity又被view持有,導致activity無法被回收。
四、響應速度優化:
1)避免在主線程做耗時操作 包括四大組件,因為四大組件都是運行在主線程的。
2)把一些創建大量對象等的初始化工作放在頁面回到前台之後,而不應該放到創建的時候。
五、ListView的優化:
1)使用convertView,走listView子View回收的一套:RecycleBin 機制
主要是維護了兩個數組,一個是mActiveViews,當前可見的view,一個是mScrapViews,當前不可見的view。當觸摸ListView並向上滑動時,ListView上部的一些OnScreen的View位置上移,並移除了ListView的屏幕范圍,此時這些OnScreen的View就變得不可見了,不可見的View叫做OffScreen的View,即這些View已經不在屏幕可見范圍內了,也可以叫做ScrapView,Scrap表示廢棄的意思,ScrapView的意思是這些OffScreen的View不再處於可以交互的Active狀態了。ListView會把那些ScrapView(即OffScreen的View)刪除,這樣就不用繪制這些本來就不可見的View了,同時,ListView會把這些刪除的ScrapView放入到RecycleBin中存起來,就像把暫時無用的資源放到回收站一樣。
當ListView的底部需要顯示新的View的時候,會從RecycleBin中取出一個ScrapView,將其作為convertView參數傳遞給Adapter的getView方法,從而達到View復用的目的,這樣就不必在Adapter的getView方法中執行LayoutInflater.inflate()方法了。
RecycleBin中有兩個重要的View數組,分別是mActiveViews和mScrapViews。這兩個數組中所存儲的View都是用來復用的,只不過mActiveViews中存儲的是OnScreen的View,這些View很有可能被直接復用;而mScrapViews中存儲的是OffScreen的View,這些View主要是用來間接復用的。
2)使用ViewHolder避免重復地findViewById
3)快速滑動不適合做大量非同步任務,結合滑動監聽,等滑動結束之後載入當前顯示在屏幕范圍的內容。
4)getView中避免做耗時操作,主要針對圖片:ImageLoader來處理(原理:三級緩存)
5)對於一個列表,如果刷新數據只是某一個item的數據,可以使用局部刷新,在列表數據量比較大的情況下,節省不少性能開銷。
六、Bitmap優化:
1)減少內存開支:圖片過大,超過控制項需要的大小的情況下,不要直接載入原圖,而是對圖片進行尺寸壓縮,方式是BitmapFactroy.Options 采樣,inSampleSize 轉成需要的尺寸的圖片。
2)減少流量開銷:對圖片進行質量壓縮,再上傳伺服器。圖片有三種存在形式:硬碟上時是file,網路傳輸時是stream,內存中是stream或bitmap,所謂的質量壓縮,它其實只能實現對file的影響,你可以把一個file轉成bitmap再轉成file,或者直接將一個bitmap轉成file時,這個最終的file是被壓縮過的,但是中間的bitmap並沒有被壓縮。bitmap.compress(Bitmap.CompressFormat.PNG,100,bos);
七、線程優化:
使用線程池。為什麼要用線程池?
1、從「為每個任務分配一個線程」轉換到「在線程池中執行任務」
2、通過重用現有的線程而不是創建新線程,可以處理多個請求在創建銷毀過程中產生的巨大開銷
3、當使用線程池時,在請求到來時間 ,不用等待系統重新創建新的線程,而是直接復用線程池中的線程,這樣可以提高響應性。
4、通過和適當調整線程池的大小 ,可以創建足夠多的線程以使處理器能夠保持忙碌狀態,同時還可以防止過多線程相互競爭資源而使應用程序耗盡內存或者失敗。
5、一個App裡面所有的任務都放在線程池中執行後,可以統一管理 ,當應用退出時,可以把程序中所有的線程統一關閉,避免了內存和CPU的消耗。
6、如果這個任務是一個循環調度任務,你則必須在這個界面onDetach方法把這個任務給cancel掉,如果是一個普通任務則可cancel,可不cancel,但是最好cancel
7、整個APP的總開關會在應用退出的時間把整個線程池全部關閉。
八、一些性能優化建議:
1)避免創建過多對象,造成頻繁的gc
2)不要過多使用枚舉,枚舉佔用的空間比整型大很多
3)字元串的拼接使用StringBuffer、StringBuilder來替代直接使用String,因為使用String會創建多個String對象,參考第一條。
4)適當使用軟引用,(弱引用就不太推薦了)
5)使用內存緩存和磁碟緩存。
㈡ android怎麼優化安裝耗時
Android系統為了保證手機的穩定性和安全性,默認只能將應用程序安裝到手機內存,這就相當於我們在電腦上安裝軟體時,只能安裝到C盤(系統盤)一樣。手機內存的空間本來就不大,安裝幾個應用程序就會被佔去大半,所以我們要想辦法讓應用程序可以安裝到存儲卡中。這就是Apptosd,簡稱為App2sd。
雖然從Android2.2開始,系統自身就已經支持App2sd,但在安裝軟體時仍會默認安裝到手機內存,需要我們到「設置-應用程序-管理應用程序」中打開要移動的應用程序詳細頁,點擊其中的「移至SD卡」才能移到存儲卡中。
超頻加速手機CPU超頻提高性能和電腦一樣,手機中也有一個CPU,而手機的運行速度很大程度上也取決於CPU的優劣,因此我們經常會在手機論壇中看到一些高手通過對CPU進行超頻的方法來改善手機性能,從而達到更加流暢的運行效果,因此,手機超頻可以說是提升機器運行速度很可行的辦法。
手機超頻需要獲取ROOT許可權,利用軟體就可以實現。下載超頻工具SetCPU,首次進入SetCPU會讓我們選擇自動超頻或者其他設置。超頻這個詞聽起來似乎很高深,但只要按照一定設置過程操作,很容易就可以實現(注意頻率不要一下調太高,超頻有風險,超頻需謹慎)。超頻以後手機的游戲性能會有不少起色,但手機會比之前的發熱量有所增加。
關閉後台進程釋放手機內存
Android系統支持多任務處理,這也是很多用戶放棄iphone選擇Android的理由。但多任務帶來的副作用就是長時間開機的話,手機會越用越慢,需要重啟才能恢復正常。Android雖然自帶任務管理器,卻只能完成後台任務之間的切換,不能關閉後台程序。Android系統自帶任務管理器,想關閉的話,需要進入設置-應用程序-管理應用程序,打開要關閉的軟體詳細頁,點擊其中的「強制停止」才行。使用AdvancedTaskManager高級任務管理器就要方便許多。下載安裝後運行高級任務管理器,軟體默認會顯示當前正在後台運行的應用程序列表,每一項的後面都標注了佔用的內存大小。
批量結束進程
Android系統很多軟體都沒有「退出」項,這一點起初讓用了多年windows的用戶們極為苦惱。而不久前有人表示,Android系統其實不需要關閉後台運行程序,相反這正是Android標榜的優勢之一,但是很多用戶仍然表示這樣做是有效果的。相關人士表示,其實這兩種觀點都沒有錯,因為在Android系統自帶的任務管理中,我們看到的程序都是剛剛運行過的,或是正在運行的,只要正常退出程序就不會佔用過多內存。在後台一直能看到是為了加速下次啟動,從而實現提高軟體啟動速度的目的。而當內存不夠用時,系統會自動結束最早使用的程序來釋放內存,所以對於一些小程序來說,不用經常手動結束任務就可以流暢運行。
㈢ 小米android9.1純凈深度優化是哪一版的
小米9MIUI11最新開發內核優化純凈版獨家magisk超級省電極速流暢ROM介紹:1.源於MIUI11開發版解包...M版本V9.1.3.0基於版本MIUI穩定版適配機型小米Note2★ROM介紹MIUI是基於Android深度優化的手機操作系統。
在過去5年每周不間斷的交流反饋中,MIUI開發組和用戶一起全面提升了手機操作使用.2016-10-0919:46Mi_1088141523關注在使用安卓手機的時候,經常會遇到系統不流暢,界面卡頓,甚至死機重啟的現象,作為Android之首的miui,它專小米手機的系統出廠的時候帶的是miui,
所謂miui就是小米在Android2.3的基礎上深度優化、定製、開發的第三方手機操作系統,可以刷原生的Android,也可以刷miui。這
㈣ 安卓手機有時開機就提示「Android正在啟動 正在優化第N個應用(共N個)。」
安卓手機顯示正在優化的處理方法:顯示正在優化通常是在手機更新完系統後第一次開機進入桌面時,此為正常現象,等待優化完成後會自動進入桌面,如遇特殊情況優化一直無法完成,多為更新故障,可以進入rec重新安裝更新包,雙清重啟手機後再試。
㈤ android 性能優化有哪些辦法
性能優化的常用方法
主要內容包括布局優化,繪制優化,內存泄露優化,相應速度優化,ListView優化,Bitmap優化,線程優化等,下面主要給你舉了其中的幾個例子:
(1)布局優化
布局優化的思想很簡單,就是盡量減少布局文件的層級。
如何進行優化呢?首先刪除布局中無用的控制項和層級,其次有選擇地使用性能較低的ViewGroup,比如LinearLayout。如果布局中有的布局既可以用LinearLayout也可以用RelativeLayout,那就用LinearLayout,這是因為RelativeLayout比較復雜,他的布局過程花費更多的CPU時間。FrameLayout和LinearLayout一樣都是一種簡單高效的ViewGroup,因此可以考慮使用他們,但是很多時候,單純的通過一個LinearLayout或者FrameLayout無法實現產品的效果,需要通過嵌套的方式來完成,這種情況建議採用RelativeLayout,因為ViewGroup的嵌套就相當於增加了布局的層級,同樣會降低程序的性能。
布局優化的另一種手段是採用<include>標槍,<merge>標簽和ViewStub。<include>標簽主要用於布局重用,<merge>標簽一般和<include>配合使用,它可以減少布局的層級。而ViewStub則提供了按需載入功能,當需要時才將ViewStub中的布局載入到內存,這提高了程序的初始化效率。
(2)繪制方法
繪制優化是指View的onDraw方法避免執行大量的操作,這主要有兩方面。
首先,onDraw中不要創建新的布局對象,這是因為onDraw方法可能會被頻繁調用,這樣就會在一瞬間產生大量的臨時對象,這不僅佔用了過多的內存而且還會導致系統更加頻繁的gc,降低了程序的執行效率。
另一方面,onDraw方法中不要做耗時的任務,也不能執行成千上萬次循環操作,盡管每次循環都很輕量級,但是大量的循環仍然十分搶佔CPU的時間片,這會造成View的繪制過程不流暢。
(3)內存泄露優化
內存泄露在開發過程中是一個需要重視的問題,但是由於內存泄露問題對開發人員的經驗和開發意識要求比較高,因此這是開發人員最容易犯的錯誤之一。內存泄露的優化分為兩個方面,一方面是在開發過程中避免寫出內存泄露的代碼,另一方面通過一些分析工具比如MAT來找出潛在的內存泄露繼而解決。
關於性能優化的建議
1.避免黃健過多對象;
2.不要過多使用枚舉,枚舉佔用的內存空間比整型大一些。
3.常量使用staticfinal來修飾。
4.使用一些Android特有的數據結構,比如SpareArray和Pair等,他們都具有更好的性能。
5.適當使用軟引用和弱引用。
6.採用內存緩存和磁碟緩存
7.盡量採用靜態內部類,這樣可以避免潛在的內部類而導致的內存泄漏。
㈥ 安卓手機怎麼設置 手機系統設置 手機性能才能提到最高
可以通過開啟發者選項,並對開發者選項相關項進行優化設置,提高手機的流暢性。
(以小米手機為例)MIUI有很多的這樣的功能,具體是菜單跳轉的漸進漸出,窗口關閉與打開時的過渡效果等,雖然過渡的不是很慢,這個功能是在開發者選項裡面設置,默認MIUI是隱藏了開發者選項的,如何開啟開發者選項以及如何設置過渡動畫可以按以下教程:
1、在手機主屏找到設置->關於手機。
5、如果將上面的效果設置為2,再返回去操作就會發現,比如打開設置,再點開其它菜單就會顯得慢,會有漸入的感覺,讓人覺得不能忍受,改到0.5或者關閉就快多了,直接彈出下一級菜單。
㈦ ios系統與android系統各自優缺點
IOS的優點:
系統專用於iphone手機,手機界面一致,可以統一進行升級和更新;
系統優化好,效率高,運行流暢,操作體驗好,對硬體的要求相對低一些;
安全,由於所有應用均來自Apple
Store,經過嚴格審查才能上架,一般不會出現惡意應用。
IOS的缺點:
系統封閉,許可權控制嚴格,用戶受限制多,不適合喜歡鑽研手機的發燒友。
安卓系統的優點:
系統開放,甚至源代碼是開放的;
資源多,由於普及率高,開發者多,應用資源也多;
創新多,各Google、手機廠家和Rom開發者都不斷推出新的UI,引入很多創新功能;
界面友好,操作體驗不錯。
安卓系統的缺點:
由於系統的開放性,給了惡意程序攻擊的機會,盡管底層也加強了安全控制,總體而言,安全性不如IOS;
碎片化,由於系統的升級要通過手機廠家,導致系統升級緩慢,新版本不能很快得到推廣,各種版本分布呈碎片狀,很難得到統一;
效率比IOS低,對硬體要求高,由於應用的編譯和運行機制限制,安卓系統一直存在越用越卡的情況,手機硬體不斷提升,仍然存在不夠用的情況。
Google一直在努力消除安卓系統的這些缺點,使安卓系統不斷得到優化。
IOS和安卓系統是應用最廣,最成功的兩個手機操作系統,二者既相互競爭,往往也相互借鑒,促使雙方共同發展和進步。
㈧ 手機安卓系統更新後一直處於這個畫面,Android正在啟動,正在優化第一
安卓手機顯示正在優化的處理方法:顯示正在優化通常是在手機更新完系統後第一次開機進入桌面時,此為正常現象,等待優化完成後會自動進入桌面,如遇特殊情況優化一直無法完成,多為更新故障,可以進入rec重新安裝更新包,雙清重啟手機後再試。
㈨ 針對Android的性能優化集中哪些方面
一、概要:
本文主要以Android的渲染機制、UI優化、多線程的處理、緩存處理、電量優化以及代碼規范等幾方面來簡述Android的性能優化
二、渲染機制的優化:
大多數用戶感知到的卡頓等性能問題的最主要根源都是因為渲染性能。
Android系統每隔16ms發出VSYNC信號,觸發對UI進行渲染, 如果每次渲染都成功,這樣就能夠達到流暢的畫面所需要的60fps,為了能夠實現60fps,這意味著程序的大多數操作都必須在16ms內完成。
*關於JobScheler的更多知識可以參考http://hukai.me/android-training-course-in-chinese/background-jobs/scheling/index.html
七、代碼規范
1)for loop中不要聲明臨時變數,不到萬不得已不要在裡面寫try catch。
2)明白垃圾回收機制,避免頻繁GC,內存泄漏,OOM(有機會專門說)
3)合理使用數據類型,StringBuilder代替String,少用枚舉enum,少用父類聲明(List,Map)
4)如果你有頻繁的new線程,那最好通過線程池去execute它們,減少線程創建開銷。
5)你要知道單例的好處,並正確的使用它。
6)多用常量,少用顯式的"action_key",並維護一個常量類,別重復聲明這些常量。
7)如果可以,至少要弄懂設計模式中的策略模式,組合模式,裝飾模式,工廠模式,觀察者模式,這些能幫助你合理的解耦,即使需求頻繁變更,你也不用害怕牽一發而動全身。需求變更不可怕,可怕的是沒有在寫代碼之前做合理的設計。
8)View中設置緩存屬性.setDrawingCache為true.
9)cursor的使用。不過要注意管理好cursor,不要每次打開關閉cursor.因為打開關閉Cursor非常耗時。Cursor.require用於刷cursor.
10)採用SurfaceView在子線程刷新UI,避免手勢的處理和繪制在同一UI線程(普通View都這樣做)
11)採用JNI,將耗時間的處理放到c/c++層來處理
12)有些能用文件操作的,盡量採用文件操作,文件操作的速度比資料庫的操作要快10倍左右
13)懶載入和緩存機制。訪問網路的耗時操作啟動一個新線程來做,而不要再UI線程來做
14)如果方法用不到成員變數,可以把方法申明為static,性能會提高到15%到20%
15)避免使用getter/setter存取field,可以把field申明為public,直接訪問
16)私有內部類要訪問外部類的field或方法時,其成員變數不要用private,因為在編譯時會生成setter/getter,影響性能。可以把外部類的field或方法聲明為包訪問許可權
17)合理利用浮點數,浮點數比整型慢兩倍
18)針對ListView的性能優化,ListView的背景色與cacheColorHint設置相同顏色,可以提高滑動時的渲染性能。ListView中getView是性能是關鍵,這里要盡可能的優化。
getView方法中要重用view;getView方法中不能做復雜的邏輯計算,特別是資料庫操作,否則會嚴重影響滑動時的性能
19)不用new關鍵詞創建類的實例,用new關鍵詞創建類的實例時,構造函數鏈中的所有構造函數都會被自動調用。但如果一個對象實現了Cloneable介面,我們可以調用它的clone()方法。
clone()方法不會調用任何類構造函數。在使用設計模式(Design Pattern)的場合,如果用Factory模式創建對象,則改用clone()方法創建新的對象實例非常簡單。例如,下面是Factory模式的一個典型實現:
20)public static Credit getNewCredit() {
return new Credit();
}
改進後的代碼使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
上面的思路對於數組處理同樣很有用。
21)乘法和除法
考慮下面的代碼:
for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
用移位操作替代乘法操作可以極大地提高性能。下面是修改後的代碼:
for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }
22)ViewPager同時緩存page數最好為最小值3,如果過多,那麼第一次顯示時,ViewPager所初始化的pager就會很多,這樣pager累積渲染耗時就會增多,看起來就卡。
23)每個pager應該只在顯示時才載入網路或資料庫(UserVisibleHint=true),最好不要預載入數據,以免造成浪費
24)提高下載速度:要控制好同時下載的最大任務數,同時給InputStream再包一層緩沖流會更快(如BufferedInputStream)
25)提供載入速度:讓服務端提供不同解析度的圖片才是最好的解決方案。還有合理使用內存緩存,使用開源的框架
引用:Android性能優化的淺談