亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android性能之冷啟動(dòng)優(yōu)化詳析

 更新時(shí)間:2019年11月17日 14:25:27   作者:曹銀飛  
這篇文章主要給大家介紹了關(guān)于Android性能之冷啟動(dòng)優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

1.前言

APP冷啟動(dòng)比較慢,點(diǎn)擊桌面圖片需要用戶等待很久,體驗(yàn)較差。

2.APP啟動(dòng)方式

冷啟動(dòng)(Cold start)

場(chǎng)景:冷啟動(dòng)是指APP在手機(jī)啟動(dòng)后第一次運(yùn)行,或者APP進(jìn)程被kill掉后在再次啟動(dòng)。

可見冷啟動(dòng)的必要條件是該APP進(jìn)程不存在,這就意味著系統(tǒng)需要?jiǎng)?chuàng)建進(jìn)程,APP需要初始化。在這三種啟動(dòng)方式中,冷啟動(dòng)耗時(shí)最長(zhǎng),對(duì)于冷啟動(dòng)的優(yōu)化也是最具挑戰(zhàn)的。因此本文重點(diǎn)談?wù)摰氖菍?duì)冷啟動(dòng)相關(guān)的優(yōu)化。

生命周期:Process.start->Application創(chuàng)建->attachBaseContext->onCreate->onStart->onResume->Activity生命周期
啟動(dòng)速度:在幾種啟動(dòng)類型中最慢,也是我們優(yōu)化啟動(dòng)速度最大的攔路虎

溫啟動(dòng)(Warm start)

場(chǎng)景:App進(jìn)程存在,當(dāng)時(shí)Activity可能因?yàn)閮?nèi)存不足被回收。這時(shí)候啟動(dòng)App不需要重新創(chuàng)建進(jìn)程,但是Activity的onCrate還是需要重新執(zhí)行的。場(chǎng)景類似打開淘寶逛了一圈然后切到微信去聊天去了,過了半小時(shí)再次回到淘寶。這時(shí)候淘寶的進(jìn)程存在,但是Activity可能被回收,這時(shí)候只需要重新加載Activity即可。

生命周期:onCreate->onStart->onResume->Activity生命周期

啟動(dòng)速度:較快

熱啟動(dòng)(Hot start)

場(chǎng)景:App進(jìn)程存在,并且Activity對(duì)象仍然存在內(nèi)存中沒有被回收??梢灾貜?fù)避免對(duì)象初始化,布局解析繪制。

場(chǎng)景就類似你打開微信聊了一會(huì)天這時(shí)候出去看了下日歷 在打開微信 微信這時(shí)候啟動(dòng)就屬于熱啟動(dòng)。

生命周期:onResume->Activity生命周期

啟動(dòng)速度:快

3.如何統(tǒng)計(jì)Android App啟動(dòng)時(shí)間(使用命令行)

adb shell am start -W [packageName]/[packageName.***Activity]

例如:

adb shell am start -W com.dateyou.test/com.datayou.test.ui.home.PageLoadingActivity

當(dāng)然為了結(jié)果更加準(zhǔn)確,可以執(zhí)行多次取平均值。

adb shell am start -S -R 10 -W com.dateyou.test/com.datayou.test.ui.home.PageLoadingActivity

其中-S表示每次啟動(dòng)前先強(qiáng)行停止,-R表示重復(fù)測(cè)試次數(shù)。每一次的輸出如下所示信息。

其中TotalTime代表當(dāng)前Activity啟動(dòng)時(shí)間

4.冷啟動(dòng)流程

冷啟動(dòng)指的是應(yīng)用程序從進(jìn)程在系統(tǒng)不存在,到系統(tǒng)創(chuàng)建應(yīng)用運(yùn)行進(jìn)程空間的過程。冷啟動(dòng)通常會(huì)發(fā)生在一下兩種情況:

1)設(shè)備啟動(dòng)以來首次啟動(dòng)應(yīng)用程序

2)系統(tǒng)殺死應(yīng)用程序之后再次啟動(dòng)應(yīng)用程序

在冷啟動(dòng)的最開始,系統(tǒng)需要負(fù)責(zé)做三件事:

1)加載以及啟動(dòng)app

2)app啟動(dòng)之后立刻顯示一個(gè)空白的預(yù)覽窗口

3)創(chuàng)建app進(jìn)程

一旦系統(tǒng)完成創(chuàng)建app進(jìn)程后,app進(jìn)程將要接著負(fù)責(zé)完成下面的工作:

1)創(chuàng)建Application對(duì)象

2)創(chuàng)建并且啟動(dòng)主線程ActivityThread

3)創(chuàng)建啟動(dòng)第一個(gè)Activity

4)Inflating views

5)布局屏幕

6)執(zhí)行第一次繪制

一旦app進(jìn)程完完成了第一次繪制工作,系統(tǒng)進(jìn)程就會(huì)用main activity替換前面顯示的預(yù)覽窗口,這個(gè)時(shí)候,用戶就可以正式開始與app進(jìn)行交互了。

從冷啟動(dòng)的流程看,我們無法干預(yù)app進(jìn)程創(chuàng)建等系統(tǒng)操作,我們能夠干預(yù)的有:

1)預(yù)覽窗口

2)Application生命周期回調(diào)

3)Activity生命周期回調(diào)

5.冷啟動(dòng)優(yōu)化

1)預(yù)覽窗口

為什么啟動(dòng)時(shí)會(huì)出現(xiàn)短暫黑屏或白屏的現(xiàn)象?當(dāng)用戶點(diǎn)擊你的app那一刻到系統(tǒng)調(diào)用Activity.onCreate()之間的這個(gè)時(shí)間段內(nèi),WindowManager會(huì)先加載app主題樣式中的windowBackground做為app的預(yù)覽元素,然后再真正去加載activity的layout布局。
很顯然,如果你的application或activity啟動(dòng)的過程太慢,導(dǎo)致系統(tǒng)的BackgroundWindow沒有及時(shí)被替換,就會(huì)出現(xiàn)啟動(dòng)時(shí)白屏或黑屏的情況(取決于你的主題是Dark還是Light)。

解決辦法:在style中自定義一個(gè)主題,在其中放一張背景圖片或者廣告頁,讓用戶先看默認(rèn)圖。

2)Application OnCrate()優(yōu)化

1.耗時(shí)操作子線程中進(jìn)行

2.非必要初始化懶加載

3)Activity onCreate()優(yōu)化

1.耗時(shí)操作子線程中進(jìn)行

2.布局層次減少

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Android中實(shí)時(shí)獲取音量分貝值詳解

    Android中實(shí)時(shí)獲取音量分貝值詳解

    這篇文章主要介紹了Android中實(shí)時(shí)獲取音量分貝值詳解,本文講解了基礎(chǔ)知識(shí)、Android API、MediaRecorder、AudioRecord等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Android中View位置和觸摸事件詳解

    Android中View位置和觸摸事件詳解

    這篇文章主要給大家介紹了關(guān)于Android中View位置和觸摸事件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • fragment實(shí)現(xiàn)隱藏及界面切換效果

    fragment實(shí)現(xiàn)隱藏及界面切換效果

    這篇文章主要為大家詳細(xì)介紹了fragment實(shí)現(xiàn)隱藏及界面切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • android studio 使用Mocklocation虛擬定位

    android studio 使用Mocklocation虛擬定位

    這篇文章主要介紹了android studio 使用Mocklocation虛擬定位總結(jié),本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Android中EditText的drawableRight屬性設(shè)置點(diǎn)擊事件

    Android中EditText的drawableRight屬性設(shè)置點(diǎn)擊事件

    這篇文章主要介紹了Android中EditText的drawableRight屬性的圖片設(shè)置點(diǎn)擊事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Android仿微信通訊錄滑動(dòng)快速定位功能

    Android仿微信通訊錄滑動(dòng)快速定位功能

    這篇文章主要介紹了Android仿微信通訊錄滑動(dòng)快速定位功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • Android實(shí)現(xiàn)的簡(jiǎn)單藍(lán)牙程序示例

    Android實(shí)現(xiàn)的簡(jiǎn)單藍(lán)牙程序示例

    這篇文章主要介紹了Android實(shí)現(xiàn)的簡(jiǎn)單藍(lán)牙程序,結(jié)合實(shí)例形式分析了Android藍(lán)牙程序的原理與客戶端、服務(wù)器端具體實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2016-10-10
  • Android多線程斷點(diǎn)續(xù)傳下載功能實(shí)現(xiàn)代碼

    Android多線程斷點(diǎn)續(xù)傳下載功能實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Android多線程斷點(diǎn)續(xù)傳下載功能的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android AMS啟動(dòng)詳解

    Android AMS啟動(dòng)詳解

    這篇文章主要介紹了Android AMS啟動(dòng)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-03-03
  • Android布局耗時(shí)監(jiān)測(cè)的三種實(shí)現(xiàn)方式

    Android布局耗時(shí)監(jiān)測(cè)的三種實(shí)現(xiàn)方式

    在Android應(yīng)用開發(fā)中,性能優(yōu)化是一個(gè)至關(guān)重要的方面,為了更好地監(jiān)測(cè)布局渲染的耗時(shí),我們需要一種可靠的實(shí)現(xiàn)方案,本文將介紹三種針對(duì)Android布局耗時(shí)監(jiān)測(cè)的實(shí)現(xiàn)方案,幫助開發(fā)者及時(shí)發(fā)現(xiàn)并解決布局性能問題,需要的朋友可以參考下
    2024-03-03

最新評(píng)論