[譯] Android App 性能優化

提高Android 應用性能

開發Android系統的應用程序,開發人員獲得了很多的自由,App的擁有者也見證了用戶的不斷增長。不過,在此過程中開發者也面對著很多應用開發的挑戰。

  • 開發人員發現很多Android os版本很難跟進開發。
  • 運行Android系統的設備類型有170+種,這也是Android開發一個巨大的挑戰。每種設備有不同的屏幕尺寸、攝像頭按鈕、鍵盤形式等等,使得開發成為一個噩夢。

記住以下幾點,我們可以在一定程度上提高我們應用程序的性能。以下介紹會降低程序的性能的因素和我們可以做的一些提升。

Slow Rendering

Slow Rendering 是最常見的性能問題。設計師希望我們做出的效果和我們最后做出的效果可能是不同的, 如果過分追求可視化的效果,可能會導致開發的失敗。

渲染是根據時間來定義的,以保證60fps的平滑運行,不發生掉幀或者延時。

什么會引起Slow Rendering

系統每16ms嘗試繪制一次界面,這意味著我們的應用必須在16ms內完成所有的更新界面的邏輯。

如果我們的應用不能在16ms完成邏輯會怎么樣呢:

以上圖中就是掉幀。舉例來說,如果我們的邏輯處理時間消耗了24ms,就會發生掉幀。系統嘗試去繪制新的一幀,但是更新邏輯還沒有完成。所以系統只能不刷新界面。這使得用戶看到的界面是32ms刷新而不是16ms。即使只掉了一幀,動畫也會看出不夠流暢。

以下的工具可以用于提高渲染效果

  1. Hierarchy Viewer

    Hierarchy Viewer是Android設備查看器中內嵌的一個工具,可以幫助我們查看層級布局中各個View的屬性和布局速度。它可以幫助我們發現由于界面層級結構引起的性能問題,幫助我們簡化布局,減少過度繪制。

  2. GPU渲染模式分析

    GPU渲染模式分析可以快速可視化顯示每一幀相對于16ms的實際繪制時間。

打開GUP渲染模式分析的方法如下:

  • 設置> 開發者工具
  • 在監控設置里選擇 GPU呈現模式分析
  • 在彈出的選擇框中選擇 在屏幕上顯示為條形圖
  • 打開需要調試的應用,可以看到代表著繪制時間的條形圖:bar_chart:。

屏幕上的橫坐標顯示時間的流動,縱坐標顯示每幀的繪制時間。如果繪制時間超過了16ms的基準線,用戶就會感覺到應用卡頓。

應用啟動時間

App啟動有兩種情況,每種啟動情況會影響應用從圖標到用戶可見使用的時間。

冷啟動

冷啟動是指應用從0開始啟動,即應用在設備重啟或者在被系統kill掉之后的第一次啟動。

在冷啟動時,系統有三個任務:

  • 裝置并啟動App
  • 隨著應用的啟動立即展示一個黑色的啟動窗口
  • 創建應用進程

熱啟動

相比冷啟動,熱啟動更簡單,消耗更小。在熱啟動中,系統的工作就是把activity放置到前臺。如果應用中的所有Activity是保留在內存中,app就可以不用重復初始化對象,布局設置,和渲染。

如何解決應用啟動延時的問題

  • 只初始化必要的對象,比如,可以把全局靜態變量放置在單例模式中,這樣應用在真正使用變量時才會初始化而不是在應用啟動時。

  • 壓扁應用層級,減少冗余的view和嵌套。

  • 資源初始化放置在異步線程中執行。

  • 讓應用先加載并展示view,之后再更新view依賴于bitmap或者其他資源的屬性。

布局

布局是App直接影響用戶體驗的一個重要部分。如果實現不合理,則在展示時導致內存資源緊張。每一個在app中小部件或者布局,都需要執行初始化、布局、和繪制。比如:使用LinearLayout的嵌套實例可能會導致視圖層次結構過深。

如何優化布局呢

  1. 優化布局層級

    使用基本的布局結構可以獲得最有效的布局。然而,每一個在app中小部件或者布局,都需要執行初始化、布局、和繪制。比如:使用LinearLayout的嵌套實例可能會導致視圖層次結構過深。此外,嵌套多個使用了 layout_weight 屬性的LiaearLayout會非常耗時,因為每個child要被計算兩次。這一點在布局被多次加載時更要注意,比如在listview或者gridview中加載。

  2. 復用布局 <Layouts>

    復用布局非常強大,允許我們創建復雜的可復用的布局。比如,一個yes/no的button,一個自定義的進度條,或者一個Textview。也就是說可以單獨提取、管理在多個布局中使用的通用元素,然后在layout中include它們。

  3. 按需加載視圖

    有時我們的布局中有些復雜的布局很少使用,無論是項目詳細信息,進度指示器還是撤消消息,可以通過僅在需要時加載視圖來減少內存使用并加快渲染速度。

電池使用

電量使用也是Android開發中需要優化的一個很重要的部分,有助于用戶的存留。

節約電量使用一些建議:

  • 減少網絡請求的次數
  • 避免使用喚醒鎖
  • 謹慎使用GPS
  • 謹慎使用Alarm 管理器
  • 使用批量調度

 

來自:http://www.jianshu.com/p/aeafdc970009

 

 本文由用戶 zpzj5834 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!