1. 程式人生 > >Android效能分析——Activity啟動速度分析工具

Android效能分析——Activity啟動速度分析工具

Android頁面基本是由大量Activity承載,流暢的頁面啟動速度代表著高使用者體驗

眾所周知,除卻底層的IPC呼叫等,就應用開發者層面而言,Activity啟動速度主要由三部分構成:佈局(layout),繪製(draw),業務(biz),針對此處,筆者開發了一款開源的效能分析工具。

下面來介紹一下此工具的使用方式和原理。

1、使用方式

第一步,Application類中配置如下

ActivityLaunchTimeAnalyzer.install(this);

第二步,授權(兩種方式)
方式A:首次啟動app後彈出授權提示框,點選允許root授權
方式B:windows命令列中執行adb命令,package-name為具體應用包名

adb shell pm grant [package-name] android.permission.READ_LOGS

第三步,殺掉app程序,再次重啟app

2、演示效果

這裡寫圖片描述

3、原理分析

A、總時間計算:

每當一個Activity啟動時,log會打印出如下日誌:

system_process I/ActivityManager﹕ Displayed com.android.example/com.android.example.MainActivity: +549ms

說明系統底層已經計算好了啟動時間,所以仔細閱讀ActivityManager相關原始碼會發現,此時間值會記錄在EventLog中,我們從中便可以獲取到此值。

B、佈局和繪製時間計算:

Activity的佈局是從setContentView開始啟動,由ViewRoot層級開始逐級measure,layout,draw。通過onAttachedToWindow獲取到測布繪開始的時間節點,通過ViewTreeObserver可監聽到layout和draw完成的時間節點,從而計算出相應時間消耗。

4、輔助特性

工具提供5中級別的Toast提示:

完美級: 0-125ms 綠色
正常級:125-250ms 淺綠色
緩慢級:250-500ms 黃色
嚴重級:500-1000ms 橘黃色
暴走級:1000ms以上 紅色

5、侷限缺陷

A、系統版本必須4.1及以上(API 16)
B、必須獲取到android.permission.READ_LOGS許可權(Manifest配置無效)
C、業務(biz)時間無法精確測量,此處暫取剩餘值

相關推薦

Android效能分析——Activity啟動速度分析工具

Android頁面基本是由大量Activity承載,流暢的頁面啟動速度代表著高使用者體驗 眾所周知,除卻底層的IPC呼叫等,就應用開發者層面而言,Activity啟動速度主要由三部分構成:佈局(layout),繪製(draw),業務(biz),針對此處,筆者開

Android 效能優化 冷啟動速度優化

前言 本篇文章對app啟動速度進行優化。先了解 Android 效能優化 基本概念應用是如何啟動的,會對此有幫助。 1. 應用的啟動模式 冷啟動 Cold start 當啟動應用時,後臺沒有該應用的程序,這時系統會重新建立一個新的程序分配給該應用,

Android】原始碼分析 - Activity啟動流程

啟動Activity的方式 Activity有2種啟動的方式,一種是在Launcher介面點選應用的圖示、另一種是在應用中通過Intent進行跳轉。我們主要介紹與後者相關的啟動流程。 Intent intent = new Intent(this, TestActivity

Activity啟動流程分析(基於android 5.1)

最近由於工作需要,需要深入瞭解AMS的內部實現。說老實話,雖然已經經過了幾輪重構,AMS的程式碼還是又臭又長。。。 萬事開頭難,先找個入口開始看吧。當從Launcher介面點選啟動一個app時,會啟動一個新的activity。所以就從startActivity()看起,研究

Android 元件Activity啟動流程分析

本篇相關流程分析基於Android4.4原始碼。 通常我們啟動一個Activity都是通過startActivity來完成。下面我們分析一下關鍵流程,本篇中以前應用的主執行緒ActivityThread為界限一分為二。 意圖啟動 首先我們使用上下文物件來

Android Activity啟動流程分析

概述 Activity作為Android的四大元件之一,Android主要的介面組成部分,用於直接跟使用者進行互動操作,在面試中與Activity相關的知識也是經常被問到,如果你面試的高階崗位,那麼對Activity的啟動和繪製流程就必須的熟悉,本文將從Act

Android9.0 Activity啟動流程分析(二)

文章目錄 1、ActivityThread的main函式 2. AMS的attachApplication函式 2.1 Part-I 2.2 Part-II 2.2.1 ApplicationThread的bindApp

Android9.0 Activity啟動流程分析(一)

1、ActivityRecord、TaskRecord、ActivityStack和ActivityDisplay介紹   本篇文章是基於Android refs/tags/android-9.0.0_r8分支的程式碼進行分析的   在分析Activity啟動的原始碼之前先介紹一下Act

Android 8.0 啟動速度優化工具

在Android 8.0上面,google進行了啟動速度的優化,但是對於開發者來說,追求更快的速度是必須的。 這邊就介紹一個android啟動速度優化的工具,bootchart。 bootchart在5.0的時候就以推出,但是現在的使用方式有了一些調整,下面就簡

Activity啟動過程分析

Android的四大元件中除了BroadCastReceiver以外,其他三種元件都必須在AndroidManifest中註冊,對於BroadCastReceiver來說,它既可以在AndroidManifest中註冊也可以通過程式碼來註冊,在呼叫方式上,Activity、Service和BroadCastR

Android 7.0系統啟動流程分析

隨著Android版本的升級,aosp專案中的程式碼也有了些變化,本文基於Android 7.0分析Android系統啟動流程.當我們按下電源鍵後,整個Android裝置大體經過了一下過程: 今天我們只想來分析init程序及其後的過程,也就是下圖所示部分:

Android N Wi-Fi 啟動流程分析

當我們在手機的setting中開啟wifi開關時,首先是wifisetting中的oncreate將載入佈局檔案。 @Override public void onCreate(Bundle icicle) { super.on

深入淺出Android中的App啟動流程分析

App啟動是指使用者點選手機桌面的app對應的icon開始,所以我們需要明白幾點基礎知識: 1.桌面也是一個Activity叫Launcher.java 2.在桌面點選icon啟動app跟在app內部啟動另一個Activity是一樣的都是呼叫startAct

Android4.4 Activity啟動流程分析

$ adb logcat -v time -s ActivityManager  --------- beginning of /dev/log/main  --------- beginning of /dev/log/system  07-01 08:35:20.039 V/ActivityManager

AOSP Android 8.0 冷啟動流程分析(二)

前奏: Android系統雖然基於Linux系統的,但是由於Android屬於嵌入式裝置,並沒有像PC那樣的BISO程式,取而代之的是Bootloader----系統啟動載入器。 /boot : 存放載入程式,核心和記憶體操作程式 /

Android O: init程序啟動流程分析(階段三)

本篇部落格我們就來看看init程序啟動時,解析init.rc檔案相關的工作。 一、建立Parser並決定解析檔案 int main(int argc, char** argv) { .............. //定義Action中

activity啟動模式分析

在Android的聯機文件中,有對Activity的簡單介紹,現在通過編寫程式碼對Activity的啟動模式做一個深入的理解。  在配置檔案AndroidManifest.xml中,activity元素的android:launchMode屬性用來配置對應Activity的啟動模式,目前有以下四種啟動模式:

Activity啟動原始碼分析

一、概述 Activity作為Android四大元件之一,也是我們平時開發中使用的最多的元件,相信大家已經瞭解了它的基本使用,那麼是否知道Activity的onCreate()、onStart()、onResume()方法是什麼時候呼叫的呢?接下來就從原始碼角

iOS應用啟動速度分析

很多app的開發者都不重視app的啟動速度,這對於碎片化使用情景的使用者來說,簡直是災難。 iOS應用的啟動速度 應用啟動時,會播放一個放大的動畫。iPhone上是400ms,iPad上是500ms。最理想的啟動速度是,在播放完動畫後,使用者就可以使用。 如果應用啟

Android 元件系列 -- Activity 啟動流程(9.0)

在學習完Android應用程式啟動過程原始碼分析,針對最新Android9.0的程式碼,以相應的順序再次學習。在9.0的版本中對於Activity的啟動流程上並沒有太大的變化,但是在程式碼層面,改動的卻很多。 流程概覽 以Launcher啟動APP為例: Lau