自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android架構(gòu)師之路之App啟動性能速度優(yōu)化

移動開發(fā) Android
隨著項目不斷的快速迭代,往往會造成App啟動卡慢現(xiàn)象,因為可能在App主進程啟動階段或者在主界面啟動階段放了很多初始化其他業(yè)務(wù)的邏輯,而這些業(yè)務(wù)落地可能一開始并不需要用到。

 [[410837]]

本文轉(zhuǎn)載自微信公眾號「Android開發(fā)編程」,作者Android開發(fā)編程。轉(zhuǎn)載本文請聯(lián)系A(chǔ)ndroid開發(fā)編程公眾號。

一、淺談啟動性能優(yōu)化原因

1、引起性能問題的原因

隨著項目不斷的快速迭代,往往會造成App啟動卡慢現(xiàn)象,因為可能在App主進程啟動階段或者在主界面啟動階段放了很多初始化其他業(yè)務(wù)的邏輯,而這些業(yè)務(wù)落地可能一開始并不需要用到;

2、為什么要做啟動速度優(yōu)化

  • App啟動卡慢會影響一個App的卸載率和使用率;
  • 啟動速度快會給人一種輕快的感覺,減少用戶等待時間;
  • 如果一個App從點擊桌面圖標(biāo)到看到主界面花了10秒,請問你能接受么?忍耐不好的估計直接就卸載了,或者沒等打開就直接Home鍵按出去,然后殺進程了;這樣一來App卸載率提升了,使用率下降了。所以對于有大量用戶的App來說,這些性能細(xì)節(jié)是很重要的;

二、分析怎么做啟動優(yōu)化

1、啟動過程簡單分析

App從點擊桌面圖標(biāo)到我們看到App的主界面整個過程中經(jīng)過了哪些步驟,哪些地方是我們可以優(yōu)化的地方;

下圖是App啟動過程的一個大概描述

2、從啟動過程找出優(yōu)化點

App啟動過程中我們優(yōu)化的地方包括主進程啟動流程和主界面啟動流程,主進程啟動就是Application的創(chuàng)建過程,主界面啟動就是MainActivity的創(chuàng)建過程;

只需要分別對這兩個部分進行優(yōu)化即可:

  • Application中attachBaseContext最早被調(diào)用,隨后是onCreate方法,盡量在這兩個方法中不要有耗時操作;
  • MainActivity中重點關(guān)注onCreate,onResume,onWindowFocusChange;

3、統(tǒng)計耗時操作

函數(shù)耗時統(tǒng)計工具之Hugo

Hugo項目是一個調(diào)試函數(shù)調(diào)用耗時的工具,通過對方法或者類添加@DebugLog注解,在運行時會將函數(shù)的耗時打印在控制臺中,通常用于排查函數(shù)耗時,或者用于卡頓檢測;

①使用方法

項目根目錄build.gradle添加hugo插件依賴

  1. classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1' 

②主工程或者library的錄build.gradle中聲明hugo插件

  1. apply plugin: 'com.jakewharton.hugo' 

復(fù)制代碼可通過配置開啟或關(guān)閉hugo功能。

  1. hugo { 
  2.   enabled false 

③在類或方法上聲明@DebugLog注解

  1. @DebugLog 
  2. public String getName(String first, String last) { 
  3.   SystemClock.sleep(15); 
  4.   return first + " " + last

④運行程序會在控制臺會打印函數(shù)耗時日志:

  1. getName [16ms] = "testtest" 

其實 hugo項目很簡單,后續(xù)我們會講解怎么自己寫一個;

三、優(yōu)化步驟

1、Application中加入異步線程

是把不必要提前做的操作放到異步線程中去做,也就是我們經(jīng)常做的異步加載;

下面簡單寫個代碼示例

  1. public class StartUpApplication extends Application { 
  2.     @Override 
  3.     public void onCreate() { 
  4.         // 程序創(chuàng)建時調(diào)用,次方法應(yīng)該執(zhí)行應(yīng)該盡量快,否則會拖慢整個app的啟動速度 
  5.         super.onCreate(); 
  6.         onSyncLoadForCreate(); 
  7.     } 
  8.     @Override 
  9.     protected void attachBaseContext(Context base) { 
  10.         super.attachBaseContext(base); 
  11.         onSyncLoad(); 
  12.         onAsyncLoad(); 
  13.     } 
  14.     private void onSyncLoadForCreate() { 
  15. Logutils.log("onSyncLoadForCreate "); 
  16.         Thread.sleep(200);模擬阻塞200毫秒 
  17.     } 
  18.     private void onSyncLoad() { 
  19. Logutils.log("onSyncLoad "); 
  20.           Thread.sleep(200);模擬阻塞100毫秒 
  21.     } 
  22.     public void onAsyncLoad() { 
  23.         new Thread(new Runnable() { 
  24.             @Override 
  25.             public void run() { 
  26.                 // 異步加載邏輯 
  27.             } 
  28.         }, "ApplicationAsyncLoad").start(); 
  29.     } 

2、主頁面加入異步線程和延遲加載功能

與Application的優(yōu)化思路一樣,也是封裝onSyncLoad和onAsyncLoad方法對現(xiàn)有代碼進行一個分類,但是這兩個方法的調(diào)用時機要晚一點,是在主界面首屏繪制完成的時候調(diào)用。這個步驟也需要new一個Thead,屬于額外的開銷,不過這不影響我們整體性能;

3、態(tài)加載布局:主布局文件優(yōu)化

把主界面中不需要第一次就用到的布局全部使用動態(tài)加載的方式來處理,使用ViewStub或者直接在使用時動態(tài)addView的方式;

4、主布局文件深度優(yōu)化

如果做了上面這些優(yōu)化還是會發(fā)現(xiàn)進入主界面還是有些慢,那么需要重點關(guān)注主布局文件了。主布局文件的復(fù)雜度直接影響到了Activity的加載速度,這個時候需要對主布局文件進行深度優(yōu)化了;

Activity在加載布局的時候,會對整個布局文件進行解析,測量(measure),布局(layout)和繪制(draw),所以設(shè)計簡單合理的布局尤為重要。幾個重要的優(yōu)化如下:

  • 減少布局層級
  • 減少首次加載View的數(shù)量
  • 減少過度繪制

5、頁面功能的分模塊化和懶加載

  • 一個頁面上有很多功能模塊,最好每個功能模塊都單獨的分開,模塊之間用接口進行數(shù)據(jù)溝通;
  • 按需加載所需要的功能,不要打開一個頁面都加載所有的功能;
  • 加載完所需要的功能,如果是一次性加載不需要保持在內(nèi)存中,盡快銷毀掉,形成良好的習(xí)慣;

總結(jié):

優(yōu)化是一條持續(xù)之路,通過優(yōu)化我們可以了解到影響啟動性能的因素有哪些,這樣我們平時在編碼的過程中就會多注意自己的代碼性能;

其實優(yōu)化還有很多辦法,比如資源文件的優(yōu)化、耗性能的寫在c++層、合理的設(shè)計模式等等,我們做的就是規(guī)范我們的代碼,讓我們自己變的更強大更好。

 

責(zé)任編輯:武曉燕 來源: Android開發(fā)編程
相關(guān)推薦

2012-06-20 13:54:44

架構(gòu)性能優(yōu)化

2019-12-13 10:25:08

Android性能優(yōu)化啟動優(yōu)化

2021-04-27 09:35:36

業(yè)務(wù)領(lǐng)域建模

2019-09-25 08:03:21

Android加速Google

2019-07-23 18:15:26

技術(shù)大數(shù)據(jù)數(shù)據(jù)庫

2021-10-25 09:41:04

架構(gòu)運維技術(shù)

2018-09-29 15:59:18

APPiOS優(yōu)化

2021-06-07 09:35:11

架構(gòu)運維技術(shù)

2021-09-03 09:44:13

移動端性能優(yōu)化U-APM

2012-04-05 10:25:02

WEB架構(gòu)師

2012-04-09 09:41:24

WEB架構(gòu)師

2018-07-03 15:46:24

Java架構(gòu)師源碼

2018-02-06 09:58:48

架構(gòu)師MVCiOS

2020-11-25 09:56:48

架構(gòu)運維技術(shù)

2022-06-15 10:04:51

存儲選型MySQL

2012-03-31 10:00:05

WEB架構(gòu)師

2020-04-15 19:53:49

TomcatApache內(nèi)存

2009-02-23 11:18:06

J2EE架構(gòu)師Java

2013-04-19 15:12:17

架構(gòu)師WEB架構(gòu)師

2023-06-05 08:19:20

性能優(yōu)化CPU
點贊
收藏

51CTO技術(shù)棧公眾號