開發Android系統的應用程序,開發人員得到了不少的自由,App的擁有者也見證了用戶的不斷增加。不過,在此過程當中開發者也面對着不少應用開發的挑戰。android
記住如下幾點,咱們能夠在必定程度上提升咱們應用程序的性能。如下介紹會下降程序的性能的因素和咱們能夠作的一些提高。網絡
Slow Rendering 是最多見的性能問題。設計師但願咱們作出的效果和咱們最後作出的效果多是不一樣的, 若是過度追求可視化的效果,可能會致使開發的失敗。app
渲染是根據時間來定義的,以保證60fps的平滑運行,不發生掉幀或者延時。異步
系統每16ms嘗試繪製一次界面,這意味着咱們的應用必須在16ms內完成全部的更新界面的邏輯。
工具
若是咱們的應用不能在16ms完成邏輯會怎麼樣呢:
佈局
以上圖中就是掉幀。舉例來講,若是咱們的邏輯處理時間消耗了24ms,就會發生掉幀。系統嘗試去繪製新的一幀,可是更新邏輯尚未完成。因此係統只能不刷新界面。這使得用戶看到的界面是32ms刷新而不是16ms。即便只掉了一幀,動畫也會看出不夠流暢。性能
Hierarchy Viewer
Hierarchy Viewer是Android設備查看器中內嵌的一個工具,能夠幫助咱們查看層級佈局中各個View的屬性和佈局速度。它能夠幫助咱們發現因爲界面層級結構引發的性能問題,幫助咱們簡化佈局,減小過分繪製。優化
GPU渲染模式分析
GPU渲染模式分析能夠快速可視化顯示每一幀相對於16ms的實際繪製時間。動畫
打開GUP渲染模式分析的方法以下:線程
屏幕上的橫座標顯示時間的流動,縱座標顯示每幀的繪製時間。若是繪製時間超過了16ms的基準線,用戶就會感受到應用卡頓。
App啓動有兩種狀況,每種啓動狀況會影響應用從圖標到用戶可見使用的時間。
冷啓動是指應用從0開始啓動,即應用在設備重啓或者在被系統kill掉以後的第一次啓動。
在冷啓動時,系統有三個任務:
相比冷啓動,熱啓動更簡單,消耗更小。在熱啓動中,系統的工做就是把activity放置到前臺。若是應用中的全部Activity是保留在內存中,app就能夠不用重複初始化對象,佈局設置,和渲染。
只初始化必要的對象,好比,能夠把全局靜態變量放置在單例模式中,這樣應用在真正使用變量時纔會初始化而不是在應用啓動時。
壓扁應用層級,減小冗餘的view和嵌套。
資源初始化放置在異步線程中執行。
讓應用先加載並展現view,以後再更新view依賴於bitmap或者其餘資源的屬性。
佈局是App直接影響用戶體驗的一個重要部分。若是實現不合理,則在展現時致使內存資源緊張。每個在app中小部件或者佈局,都須要執行初始化、佈局、和繪製。好比:使用LinearLayout的嵌套實例可能會致使視圖層次結構過深。
如何優化佈局呢
優化佈局層級
使用基本的佈局結構能夠得到最有效的佈局。然而,每個在app中小部件或者佈局,都須要執行初始化、佈局、和繪製。好比:使用LinearLayout的嵌套實例可能會致使視圖層次結構過深。此外,嵌套多個使用了 layout_weight
屬性的LiaearLayout會很是耗時,由於每一個child要被計算兩次。這一點在佈局被屢次加載時更要注意,好比在listview或者gridview中加載。
複用佈局
複用佈局很是強大,容許咱們建立複雜的可複用的佈局。好比,一個yes/no的button,一個自定義的進度條,或者一個Textview。也就是說能夠單獨提取、管理在多個佈局中使用的通用元素,而後在layout中include它們。
按需加載視圖
有時咱們的佈局中有些複雜的佈局不多使用,不管是項目詳細信息,進度指示器仍是撤消消息,能夠經過僅在須要時加載視圖來減小內存使用並加快渲染速度。
電量使用也是Android開發中須要優化的一個很重要的部分,有助於用戶的存留。
節約電量使用一些建議: