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

Android優(yōu)化應用啟動速度

 更新時間:2016年01月15日 09:15:45   作者:Sunzxyong  
這篇文章主要介紹了Android優(yōu)化應用啟動速度,針對Android性能優(yōu)化中的加快應用啟動速度進行學習,感興趣的小伙伴們可以參考一下

一、應用的啟動

啟動方式

通常來說,在安卓中應用的啟動方式分為兩種:冷啟動和熱啟動。

  • 1、冷啟動:當啟動應用時,后臺沒有該應用的進程,這時系統(tǒng)會重新創(chuàng)建一個新的進程分配給該應用,這個啟動方式就是冷啟動。
  • 2、熱啟動:當啟動應用時,后臺已有該應用的進程(例:按back鍵、home鍵,應用雖然會退出,但是該應用的進程是依然會保留在后臺,可進入任務列表查看),所以在已有進程的情況下,這種啟動會從已有的進程中來啟動應用,這個方式叫熱啟動。

特點

1、冷啟動:冷啟動因為系統(tǒng)會重新創(chuàng)建一個新的進程分配給它,所以會先創(chuàng)建和初始化Application類,再創(chuàng)建和初始化MainActivity類(包括一系列的測量、布局、繪制),最后顯示在界面上。

2、熱啟動:熱啟動因為會從已有的進程中來啟動,所以熱啟動就不會走Application這步了,而是直接走MainActivity(包括一系列的測量、布局、繪制),所以熱啟動的過程只需要創(chuàng)建和初始化一個MainActivity就行了,而不必創(chuàng)建和初始化Application,因為一個應用從新進程的創(chuàng)建到進程的銷毀,Application只會初始化一次。

上面說的啟動是點擊app的啟動圖標來啟動的,而另外一種方式是進入最近使用的列表界面來啟動應用,這種不應該叫啟動,應該叫恢復。

二、應用啟動的流程

在安卓系統(tǒng)上,應用在沒有進程的情況下,應用的啟動都是這樣一個流程:當點擊app的啟動圖標時,安卓系統(tǒng)會從Zygote進程中fork創(chuàng)建出一個新的進程分配給該應用,之后會依次創(chuàng)建和初始化Application類、創(chuàng)建MainActivity類、加載主題樣式Theme中的windowBackground等屬性設置給MainActivity以及配置Activity層級上的一些屬性、再inflate布局、當onCreate/onStart/onResume方法都走完了后最后才進行contentView的measure/layout/draw顯示在界面上,所以直到這里,應用的第一次啟動才算完成,這時候我們看到的界面也就是所說的第一幀。

所以,總結一下,應用的啟動流程如下:

Application的構造器方法——>attachBaseContext()——>onCreate()——>Activity的構造方法——>onCreate()——>配置主題中背景等屬性——>onStart()——>onResume()——>測量布局繪制顯示在界面上。

三、測量應用啟動的時間

在上面這個啟動流程中,任何一個地方有耗時操作都會拖慢我們應用的啟動速度,而應用啟動時間是用毫秒度量的,對于毫秒級別的快慢度量我們還是需要去精確的測量到到底應用啟動花了多少時間,而根據(jù)這個時間來做衡量。

什么才是應用的啟動時間

從點擊應用的啟動圖標開始創(chuàng)建出一個新的進程直到我們看到了界面的第一幀,這段時間就是應用的啟動時間。

我們要測量的也就是這段時間,測量這段時間可以通過adb shell命令的方式進行測量,這種方法測量的最為精確,命令為:

adb shell am start -W [packageName]/[packageName.MainActivity]

執(zhí)行成功后將返回三個測量到的時間:
1、ThisTime:一般和TotalTime時間一樣,除非在應用啟動時開了一個透明的Activity預先處理一些事再顯示出主Activity,這樣將比TotalTime小。
2、TotalTime:應用的啟動時間,包括創(chuàng)建進程+Application初始化+Activity初始化到界面顯示。
3、WaitTime:一般比TotalTime大點,包括系統(tǒng)影響的耗時。

下面是測量一個應用冷啟動和熱啟動的時間:
冷啟動:

熱啟動:

可以看到在進程已經存在的情況下,只需要重新初始化MainActivity,這樣的啟動比較快,不過大多數(shù)情況下應用的啟動都是冷啟動,因為用戶都會在任務列表中手動關閉遺留的應用進程。

四、減少應用啟動時的耗時

針對冷啟動時候的一些耗時,如上測得這個應用算是中型的app,在冷啟動的時候耗時已經快700ms了,如果項目再大點在Application中配置了更多的初始化操作,這樣將可能達到1s,這樣每次啟動都明顯感覺延遲,所以在進行應用初始化的時候采取以下策略:

  • 1、在Application的構造器方法、attachBaseContext()、onCreate()方法中不要進行耗時操作的初始化,一些數(shù)據(jù)預取放在異步線程中,可以采取Callable實現(xiàn)。
  • 2、對于sp的初始化,因為sp的特性在初始化時候會對數(shù)據(jù)全部讀出來存在內存中,所以這個初始化放在主線程中不合適,反而會延遲應用的啟動速度,對于這個還是需要放在異步線程中處理。
  • 3、對于MainActivity,由于在獲取到第一幀前,需要對contentView進行測量布局繪制操作,盡量減少布局的層次,考慮StubView的延遲加載策略,當然在onCreate、onStart、onResume方法中避免做耗時操作。

遵循上面三種策略可明顯提高app啟動速度。

優(yōu)化應用啟動時的體驗

對于應用的啟動時間,只能是盡量的避免一些耗時的、非必要的操作在主線程中,這樣相對可以縮減一部分啟動的耗時,另外一方面在等待第一幀顯示的時間里,可以加入一些配置以增加體驗,比如加入Activity的background,這個背景會在顯示第一幀前提前顯示在界面上。
1、先為主界面單獨寫一個主題style,設置一張待顯示的圖片,這里我設置了一個顏色,然后在manifest中設置給MainActivity:

<style name="AppTheme.Launcher">
 <item name="android:windowBackground">@drawable/bule</item>
</style>
//...
  <activity
   android:name=".MainActivity"
   android:label="@string/app_name"
   android:theme="@style/AppTheme.Launcher">
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>

2、然后在MainActivity中加載布局前把AppTheme重新設置給MainActivity:

@Override
 protected void onCreate(Bundle savedInstanceState) {

  setTheme(R.style.AppTheme);
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
} 

這樣在啟動時會先顯示background,然后待界面繪制完成再顯示主界面:

以上就是本文的全部內容,希望對大家學習Android軟件編程有所幫助。

相關文章

  • android仿360加速球實現(xiàn)內存釋放

    android仿360加速球實現(xiàn)內存釋放

    本篇文章實現(xiàn)了Android仿360加速球實現(xiàn)內存釋放,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • android開發(fā)中使用java觀察者模式

    android開發(fā)中使用java觀察者模式

    遇到android程序中后入棧的一個Activity需要更新之前一個或者兩個以上Activity中的數(shù)據(jù)時使用,或者需要在adapter中修改Activity或者fragment的數(shù)據(jù)和ui等
    2014-02-02
  • Android使用控件ImageView加載圖片的方法

    Android使用控件ImageView加載圖片的方法

    這篇文章主要為大家詳細介紹了Android使用ImageView加載圖片的方法,Android ImageView如何加載網(wǎng)絡圖片資源,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android整理好的圖片壓縮工具類

    Android整理好的圖片壓縮工具類

    今天小編就為大家分享一篇關于Android整理好的圖片壓縮工具類,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Android實現(xiàn)左右擺動的球體動畫效果

    Android實現(xiàn)左右擺動的球體動畫效果

    這篇文章主要介紹了Android實現(xiàn)左右擺動的球體動畫效果,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • Android開發(fā)自學筆記(一):Hello,world!

    Android開發(fā)自學筆記(一):Hello,world!

    這篇文章主要介紹了Android開發(fā)自學筆記(一):Hello,world!本文講解了創(chuàng)建HelloWorld工程、編寫代碼、啟動模擬器等步驟,需要的朋友可以參考下
    2015-04-04
  • Android Intent傳遞數(shù)據(jù)大小限制詳解

    Android Intent傳遞數(shù)據(jù)大小限制詳解

    這篇文章主要給大家介紹了關于Android Intent傳遞數(shù)據(jù)大小限制的相關資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Android使用VideoView出現(xiàn)無法播放此視頻問題的解決方法

    Android使用VideoView出現(xiàn)無法播放此視頻問題的解決方法

    Android提供了 VideoView組件,它的作用與ImageView類似,只是ImageView用于顯示圖片,而VideoView用于播放視頻,下面這篇文章主要給大家介紹了關于利用VideoView出現(xiàn)無法播放此視頻問題的解決方法,需要的朋友可以參考下
    2018-07-07
  • Android?自定義view中根據(jù)狀態(tài)修改drawable圖片

    Android?自定義view中根據(jù)狀態(tài)修改drawable圖片

    這篇文章主要介紹了Android?自定義view中根據(jù)狀態(tài)修改drawable圖片的相關資料,需要的朋友可以參考下
    2023-07-07
  • Android Studio Kotlin代碼和java代碼相互轉化實例

    Android Studio Kotlin代碼和java代碼相互轉化實例

    這篇文章主要介紹了Android Studio Kotlin代碼和java代碼相互轉化實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論