android效能最佳化的一些東西

來源:互聯網
上載者:User

標籤:

  說到android效能最佳化,總覺得是一個很模糊的東西,因為app的效能始終適合手機本身的效能掛鈎的,也許一些消耗內容的操作,在一些行動裝置可以運行,但是在另外一些上面就會出現記憶體溢出的問題,但是不管怎麼說,但問題出現的時候,我們應該有解決的辦法,最起碼有解決辦法的思路,下面就是聊聊android效能一些問題。

  首先是三個名稱:記憶體流失,記憶體溢出(OOM),應用程式無響應(ANR)。

  我們知道,android手機上運行app其實很多時候(只是很多時候),每個app都運行在一個進程中,這個進程是裝置給應用程式分配的,其實你也可以理解為,每個應用程式運行在一個裝置為我們分配的虛擬機器(dalivk虛擬機器)中,這樣一來,其實每個程式能夠給我們使用的記憶體是裝置分配給我們的。而每個進程中可以並且只有一個線程,這個線程就是主線程(也叫UI線程)。如果我們在這個主線程中做太多的耗時操作,就會引起操作的卡頓這些問題。如果嚴重的話就會引起應用程式無響應(ANR)。

  記憶體流失就是,我們的程式在申請記憶體後(比如執行個體化對象),在使用結束後,不能及時釋放掉這些記憶體。一般記憶體流失單次不會有太多問題,但是太多的記憶體流失會導致太多無用的記憶體佔有,這個時候有可能會導致記憶體溢出(OOM)。

  記憶體溢出分兩種情況,第一種,我們為一個對象分配的空間不夠本對象使用,比如執行個體化了一個integer對象,但是放入一個更大的對象。第二個就是虛擬機器記憶體被佔滿。

  那麼如何解決這些問題呢,這裡只是一些思路:

  1、在使用布局的時候,使用簡單布局。有兩種情況,第一種,勁量不要嵌套太多的無用布局,這樣不會在CPU運算時做太多無用的計算,第二個,就是在使用布局的時候,勁量使用簡單的viewgrounp,在這裡複雜程度的排序:RelativeLayout大於LinearLayout和FrameLayout。

  2、在使用布局的時候,多使用<include>、<merge>和ViewStub。一般<include>和<merge>配合使用,這樣就不必過多的重複使用一段代碼,這樣就會不至於CPU重複運行一段布局。ViewStub是在有需求的時候在載入布局,比如一個介面中有一段布局預設是不顯示的,但是當我們需要時候的時候需要顯示,這個時候假如我們不使用的時候也載入這段代碼就是不合適的。這個時候使用ViewStub就好。

  3、使用靜態變數的時候勁量使用final,或是說勁量少的使用靜態變數,我們知道靜態變數不會隨著調用它的程式結束而消失,這會導致一定程度上的記憶體流失。

  4、使用屬性動畫的時候在Activity結束的時候,要使用animator.cancel()來停止動畫,因為有些動畫是無限迴圈的,在調用他的程式都結束的時候,他還會一直迴圈,這個時候也會造成記憶體流失。

  5、在自訂view或viewgrounp的時候,不要在onDraw中做太多的耗時操作,因為這樣會導致view的繪製過程不流暢,導致一種卡卡的感覺。

  6、不要在onDraw方法中定義局部變數,因為在view繪製的工程中,onDraw方法會多次調用,這樣會多次建立局部變數,對記憶體造成不必要的浪費。

  7、對listview等的最佳化,在自訂Adpter的時候,使用holder,這樣可以重複調用已經執行個體化好的對象,而不會重複執行個體化對象。同時在getView中不要做耗時操作,這樣會使listview等整體載入流暢。

  8、勁量少的使用枚舉,枚舉佔用的空間比整形大。

  9、少的建立對象,因為建立對象就會對應的建立堆記憶體和棧記憶體,基本我們不調用不賦值,也會建立堆記憶體。

  10、勁量多的使用記憶體緩衝和磁碟緩衝,如使用LruCache等,這樣可以使一些資源重複調用。

  11、適當使用軟應用和弱應用。

  12、使用線程的時候,使用線程池,這樣可以避免大量的建立線程和銷毀線程的操作。

  出現ANR的時候,我們可以使用系統在/data/anr裡面產生的日誌traces.txt進行分析。使用命令:adb pull /data/anr/traces.txt,就可以開啟查看日誌了。

  記憶體流失的問題,我們可以使用MAT工具進行分析。

  關於效能最佳化,其實有數不盡的需要注意的地方。畢竟永遠都沒有最優只要更優。也歡迎各位補充。

android效能最佳化的一些東西

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.