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

前言

?啟動速度是用戶對于App好用與否的第一印象牲距,如果用戶在打開一個頁面等待時間超過8S,那么用戶將放棄等待购啄,因此啟動速度優(yōu)化是對于一款A(yù)pp來說是重要的環(huán)節(jié)之一睁宰。

啟動分類

?Android啟動方式分為冷啟動歇万、熱啟動、溫啟動勋陪,一般情況下我們做啟動優(yōu)化主要是針對冷啟動做的贪磺。首先我們可以先通過一些方式去獲得啟動的時間,時間測量有ADB命令诅愚、手動打點寒锚、AOP等方式,每一種方式都有各自的特點和使用場景违孝。
冷啟動流程(耗時最長)
launcher->Ipc->Process.start->ActivityThread->bindApplication->Lifecycle->ViewRootImpl
熱啟動流程(耗時最短)
后臺->前臺

1 ADB命令統(tǒng)計時間

?Google提供的啟動時間文章App startup time

1.1 先安裝app到虛擬機(jī)

1.2 使用adb命令

adb shell am start -W 包名/activiti絕對路徑
例如:adb shell am start -W com.example.demo/.MainActivity打開應(yīng)用的MainActivity界面

  • 注意:-W 使用的是大寫的W

1.3 查看結(jié)果

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] 
cmp=com.example.myapplication/.MainActivity }
Status: ok
Activity: com.example.myapplication/.MainActivity
ThisTime: 944
TotalTime: 944
WaitTime: 955
Complete
  • ThisTime : 最后一個Activity啟動耗時
  • TotalTime : 所有Activity啟動耗時
  • WaitTime : AMS啟動Activity的總耗時
    ?一般情況下ThisTime和TotalTime是相等的刹前。

缺點

?使用ADB命令只能測試某個Activity的打開到初始化完成的時間,但是在真實的場景中有時候并不是只需要啟動一個Activity雌桑,例如有可能先打開一個啟動頁SplashActivity經(jīng)過一段時間的動畫喇喉,再打開真正的首頁,這才是用戶真正等待的時間校坑,使用ADB命令并不能測量出來拣技。因此使用ADB命令來所測量出的時間并不嚴(yán)謹(jǐn)。
?沒有在AndroidManifest.xml對應(yīng)的Activity聲明中指定為啟動頁或者屬性沒有android:exported="true"的Activity不能使用這種命令行的形式計算啟動時間耍目。

2 手動打點

?手動打點就是在啟動開始時和結(jié)束時進(jìn)行埋點操作膏斤,然后計算二者的差值。
?首先要在Application中的onattachBaseContext方法進(jìn)行開始啟動時間埋點邪驮,這是我們所能接觸到的最早啟動的時間莫辨。

class MyApplication : Application() {
    override fun attachBaseContext(base: Context?) {
        super.attachBaseContext(base)
        CalculatTime.startRecord()
    }

    override fun onCreate() {
        super.onCreate()
    }
}

?然后在第一次展示數(shù)據(jù)時,或Feed第一條展示時結(jié)束埋點。

observer = view.getViewTreeObserver();
//注冊觀察者沮榜,監(jiān)聽變化
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                if(observer.isAlive()){
                    observer.removeOnPreDrawListener(this);
                }
                CalculateTime.INSTANCE.endRecord("MainActivity");
                return true;
            }
        });

?注意:這里會存在一個誤區(qū)盘榨,在onWindowFocusChanged進(jìn)行結(jié)束時間的記錄,這是不合適的蟆融。
?我們不僅可以計算用戶真正看到第一幀所消耗的時間较曼,也可以通過手動打點的方式計算時間,其中包括第三方SDK(友盟振愿、百度統(tǒng)計等等)或者其它需要第一時間初始化的框架。

object CalculateTime {
    private var startTime: Long = 0
    fun startRecord() {
        startTime = SystemClock.currentThreadTimeMillis()
    }

    fun endRecord(tag: String) {
        Log.d(tag, "${SystemClock.currentThreadTimeMillis() - startTime}")
    }
}

總結(jié)

?啟動時間測量有兩種方式弛饭,一種是ADB命令冕末,另一種是手動打點的方式。手動打點要避免誤區(qū)侣颂,在第一條數(shù)據(jù)展示時才算打點結(jié)束档桃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市憔晒,隨后出現(xiàn)的幾起案子藻肄,更是在濱河造成了極大的恐慌,老刑警劉巖拒担,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘹屯,死亡現(xiàn)場離奇詭異,居然都是意外死亡从撼,警方通過查閱死者的電腦和手機(jī)州弟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來低零,“玉大人婆翔,你說我怎么就攤上這事√蜕簦” “怎么了啃奴?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長雄妥。 經(jīng)常有香客問我最蕾,道長,這世上最難降的妖魔是什么老厌? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任揖膜,我火速辦了婚禮,結(jié)果婚禮上梅桩,老公的妹妹穿的比我還像新娘壹粟。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布趁仙。 她就那樣靜靜地躺著洪添,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雀费。 梳的紋絲不亂的頭發(fā)上干奢,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音盏袄,去河邊找鬼忿峻。 笑死,一個胖子當(dāng)著我的面吹牛辕羽,可吹牛的內(nèi)容都是我干的逛尚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刁愿,長吁一口氣:“原來是場噩夢啊……” “哼绰寞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铣口,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤滤钱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后脑题,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體件缸,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年叔遂,在試婚紗的時候發(fā)現(xiàn)自己被綠了停团。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡掏熬,死狀恐怖佑稠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旗芬,我是刑警寧澤舌胶,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站疮丛,受9級特大地震影響幔嫂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜誊薄,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一履恩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呢蔫,春花似錦切心、人聲如沸飒筑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽协屡。三九已至,卻和暖如春全谤,著一層夾襖步出監(jiān)牢的瞬間肤晓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工认然, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留补憾,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓卷员,卻偏偏與公主長得像盈匾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子子刮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一、前記 隨著技術(shù)的迭代窑睁,許多三方SDK一涌而出挺峡,統(tǒng)計、推送担钮、IM橱赠、BUG監(jiān)控等,導(dǎo)致我們現(xiàn)在項目中的Ap...
  • 如需轉(zhuǎn)載請評論或簡信箫津,并注明出處狭姨,未經(jīng)允許不得轉(zhuǎn)載 系列文章 App啟動優(yōu)化(一)冷啟動和熱啟動 App啟動優(yōu)化(...
    Geekholt閱讀 1,586評論 0 5
  • 啟動優(yōu)化的目的 APP啟動如果得到很好的優(yōu)化,增強(qiáng)用戶體驗增加用戶流量苏遥;如果app啟動時間過長影響用戶體驗饼拍,從而會...
    安仔夏天勤奮閱讀 981評論 0 1
  • 啟動優(yōu)化 對于應(yīng)用的性能優(yōu)化,首先我們需要了解幾個概念: 首先做性能優(yōu)化到底是做哪些優(yōu)化田炭?我的理解是:真正影響用戶...
    有沒有口罩給我一個閱讀 1,173評論 0 3
  • 臥榻之側(cè) 豈容他人安睡 這是赤裸裸的離開現(xiàn)實 水災(zāi)之后 暫時沒有處理老家的房子 現(xiàn)在別人家的水泥已經(jīng)打到我們的門前...
    慕星讀者OR獨者閱讀 106評論 0 1