導航:首頁 > 操作系統 > android提高性能

android提高性能

發布時間:2023-01-26 12:53:46

『壹』 如何提升android應用的性能

第一個要點:首先要有良好的編程習慣
要成為一名優秀的資源管理員;既要運用常識,還要使用公認的演算法和標準的設計模式。在資源使用方面,如果你打開了資源,要記得關閉資源。要盡量晚地獲取,盡量早地釋放。這些由來已久的編程准則同樣適用於你的Android應用程序,如果它們使用底層的設備服務,更是如此。

第二個要點:讓阻塞操作遠離主用戶界面線程
想確保你的應用程序運行起來很靈活,就要使用AsyncTask、線程、IntentService或自定義後台服務來處理臟活。應使用裝入器來簡化裝入時間長的數據(如游標)的狀態管理。你無法容忍你的應用程序在某個操作正在處理的時候出現滯後或停頓。

第三個要點:使用最新的Android軟體開發工具包(SDK)版本、應用編程介面(API)和最佳實踐
確保你開發的應用程序是最新的,因而要使用Android平台提供的最新工具。隨著Android平台不斷發展,它也在不斷改進。一些功能 可能已被棄用,或者換成了更好的功能。核心API得到了修正版(bug fix)和性能改進。已經引入了裝入器等新的API,幫助開發者編寫出運行更穩定、響應更迅即的應用程序。

第四個要點:考慮使用限制模式(Strict Mode)
你可以使用名為限制模式(StrictMode)的AndroidAPI,幫助你查明哪裡違反了幾個良好的編程習慣。StrictMode 會幫助你確認你的應用程序是不是存在內存泄漏,並且檢測你的應用程序是不是在試圖執行長時間的阻塞操作,這些操作應該被卸載到線程或別的渠道。
Android2.3裡面引入StrictMode類(android.os.StrictMode)。

第五個要點:在發布應用程序之前,禁用或盡量少用調試和診斷
如果你的Android應用程序開發起來需要一些時間,你可能已將一些日誌和調試代碼嵌入到了應用程序中。寫入到日誌及其他此類輸出系統給性能帶來了影響。確保在發布應用程序之前,盡量少用或完全禁用這些功能。

第六個要點:確保你設計的布局簡單、簡練和淺層

簡單的屏幕有助於閱讀起來最輕松,而簡單的布局裝入起來最快速。你不應該過於深層地嵌套你的布局,或者用不必要的過多視圖(View)控制項 塞滿屏幕。花些時間來開發用戶可以高效使用的簡練用戶界面,而不是試圖把太多功能塞入到單單一個屏幕上。這不但有助於提升應用程序的性能,還有助於讓你的 應用程序對用戶來說更高效。

第七個要點:讓你應用程序的資源適合目標設備
添加適合特定設備配置的資源,那樣它們就能盡可能高效地裝入。我們在談論圖形資源時,這點尤為重要。如果你添加了可利用的龐大圖像資源,需要裝入和調整大小,就無法有效地使用其他的應用程序資源。

第八個要點:使用Hierarchy Viewer工具
Hierarchy Viewer工具可以幫助你調試你的應用程序布局。它還提供了寶貴的分析信息,以便了解布局裡面的每一個視圖控制項測量、渲染和繪制要花多少時間。只有準確找到了問題的根源,問題解決起來才容易。

第九個要點:使用layoutopt工具
Layoutopt工具是一款簡單的命令行工具,它可以幫助你找到不必要的控制項嵌套以及縮減布局資源的其他方法,以便盡量減少資源的使用。它讓你可以了解哪些布局控制項可能是多餘的或不必要的。控制項越少、布局層次越淺,性能就越好。

『貳』 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.盡量採用靜態內部類,這樣可以避免潛在的內部類而導致的內存泄漏。

『叄』 android 應用性能優化篇

1、布局文件merge 合並同布局級別

2、界面View過多,層級過深

3、內部Handler 未使用靜態修飾符,可能導致內存泄露

4、自定義View 在onMeasure、onLayout、onDraw等避免使用new 關鍵字創建對象,因為這些方法都是、

可能被多次調用,使用new 會開辟內存,影響性能

5、自定義View中 TypedArray 及時回收,TypedArray本身是使用池和單例模式獲取對象,由於系統頻繁

創建arrary,內存和性能都是開銷,所以需要回收。

6、不去使用靜態的context 也不要在Application中設置靜態的context來使用,使用context的時候根據

使用的場景 判斷一下應該使用什麼樣的context

7、刪除未使用的資源,lint--->unused resurce

8、將allowBackup屬性值顯示設置為false,如為True,則應用數據支持備份,可能存在安全隱患

9、android SparseArray使用,Android內部特有的api,標準的jdk是沒有這個類的.在Android內部用來替代

HashMap<Integer,E>這種形式,使用SparseArray更加節省內存空間的使用,

SparseArray也是以key和value對數據進行保存的.使用的時候只需要指定value的類型即可.並且key不需要封裝成對象類型

『肆』 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應用的性能

應用的性能除了和手機有關,程序的優化也是很重要的,我來簡單說說幾點:
(1)資料庫操作,這是很常見的操作,每次退出頁面或者代碼塊需要關閉Cursor及資料庫
(2)常見的流操作,如網路流,文件流,用完後需要關閉流
(3)代碼塊的優化,多用局部變數,少用全局變數,因為代碼塊執行完了就會釋放空間
(4)對象用完後,如果有必要,可以做null處理,即賦值null,釋放空間
(5)對於有網路請求圖片的操作,要使用緩存和圖片壓縮,提高速率和性能
當然,代碼有很多風格,代碼優化也有很多方面,我說的算是很常見的了

閱讀全文

與android提高性能相關的資料

熱點內容
如何登錄別人的伺服器 瀏覽:626
調度系統軟體python 瀏覽:205
微信大轉盤抽獎源碼 瀏覽:497
壓縮機損壞的表現 瀏覽:862
同步數據伺服器怎麼用 瀏覽:634
163郵箱伺服器的ip地址 瀏覽:50
伺服器跟域是什麼 瀏覽:128
rails啟動命令 瀏覽:465
logistic命令怎麼用 瀏覽:738
c語言點滴pdf 瀏覽:747
linuxrtc編程 瀏覽:258
linux打包並壓縮命令 瀏覽:644
aes加密的證書格式 瀏覽:99
oracledbcalinux 瀏覽:844
酬勤任務app怎麼被特邀 瀏覽:199
android應用文件夾 瀏覽:1002
平面設計法則pdf 瀏覽:339
3d圓角命令怎麼用 瀏覽:569
程序員買意外險還是重疾險 瀏覽:621
遼寧的dns伺服器地址雲空間 瀏覽:448