最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Android冷啟動耗時優(yōu)化詳解

 更新時間:2022年01月14日 10:46:58   作者:冬天的毛毛雨  
大家好,本篇文章主要講的是關(guān)于Android冷啟動耗時優(yōu)化詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

1,背景

最近開發(fā)了一個新的App,前期工期緊,做的比較粗放,上線以后發(fā)現(xiàn)App啟動時間比較長,達(dá)到3秒,

啟動有白屏,體驗也不好,這個只能后期優(yōu)化了,最好是前期開發(fā)就考慮的

2,調(diào)研

2.1,Android中啟動的方式

1,冷啟動:如果App啟動時,后臺沒有該應(yīng)用進(jìn)程,那么系統(tǒng)會重新創(chuàng)建一個進(jìn)程分配給該應(yīng)用,這種啟動方式就是冷啟動

2,熱啟動:如果App啟動時,后臺有該應(yīng)用進(jìn)程,那么系統(tǒng)就是直接使用已有進(jìn)程

從兩種啟動方式的含義就可以看出,冷啟動比較耗時,熱啟動一般比較快,我們要做的啟動優(yōu)化一般做的就是冷啟動優(yōu)化

2.2,冷啟動流程

系統(tǒng)創(chuàng)建應(yīng)用進(jìn)程時間我們一般無法優(yōu)化,這個是系統(tǒng)創(chuàng)建簡單的流程

我們可以優(yōu)化的地方就是

1,Application
2,SplashActivity
3,MainActivity

2.3,啟動時間

1,通過命令

adb shell am start -W [packageName]/[packageName.MainActivity]
這個時候,如果啟動的activity在Manifest中沒有設(shè)置export:true,可能無法通過命令打開,需要設(shè)置這個

2,自己埋點

從上面的啟動過程就可以知道,Android冷啟動,系統(tǒng)要先創(chuàng)建一個進(jìn)程,然后創(chuàng)建Application,系統(tǒng)創(chuàng)建進(jìn)程的過程,我們可以在Application的attachBaseContext方法中開始埋點

/**
* 統(tǒng)計冷啟動各個時間點的耗時
*/
public class StartLogHelper {

    private static final String TAG = "StartLogHelper";
    private static long startTime;

    /**
     * 設(shè)置開始時間,暫時放到啟動的時間,放到Application的attachBaseContext方法中
     * @param start
     */
    public static void setStart(long start){
        startTime = start;
    }

    /**
     * application初始化的時間,放到Application的onCreate方法最后
     */
    public static void getApplicationTime(){
        long end = System.currentTimeMillis();
        DebugLog.e(TAG,"==================getApplicationTime==" + (end - startTime));

    }

    /**
     * 歡迎頁初始化的時間
     */
    public static void getWelcomeTime(){
        long end = System.currentTimeMillis();
        DebugLog.e(TAG,"==================getWelcomeTime==" + (end - startTime));
    }

    /**
     * Main頁面初始化的時間
     */

    public static void getMainTime(){
        long end = System.currentTimeMillis();
        DebugLog.e(TAG,"==================getMainTime==" + (end - startTime));
    }

3,在studio的logcat日志中

在logcat日志中輸入應(yīng)用的包名

然后就可以看到各個階段的時間了

3,方案

從調(diào)研冷啟動的原理就可以得出,我們要優(yōu)化的地方

1,冷啟動白屏現(xiàn)象

冷啟動的時候,我們發(fā)現(xiàn)會有白屏現(xiàn)象,會先出現(xiàn)一個白屏,然后在出現(xiàn)歡迎頁的UI,這個跟系統(tǒng)的設(shè)置的背景windowBackground有關(guān)系

解決方案:

在歡迎頁設(shè)置一個自定義的theme屬性

SplashActivity的清單文件設(shè)置
   android:theme="@style/SplashScreenTheme”

SplashScreenTheme屬性定義
   <style name="SplashScreenTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/bg_splash</item>
   </style>

bg_splash定義
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white" />
        <bitmap
            android:antialias="true"
            android:gravity="center"
            android:src="@drawable/bg_show" />
    </item>
</layer-list>
其中bg_show的圖片和歡迎頁的初始圖片一樣,這樣就可以實現(xiàn)啟動白屏的樣式
和歡迎頁樣式一樣,給人沒有白屏的感覺

2,啟動時間優(yōu)化

我們從上面的啟動時間就可以知道

1,Application onCreate中初始化三方sdk耗時

public class AppConfigHelper {
    public void setAppConfig(Application application){
        addSyncTask(application);
        addAsyncTask(application);
        TaskConfigManager.getInstance().startInit();
    }

    private void addSyncTask(Application application) {
        TaskConfigManager.getInstance().addTask(new ZMLTask("oneLogin") {
            @Override
            public void run() {
                JVerifyHelper.init(application);
            }
        });
    }
}
把需要在Application中同步執(zhí)行的放到一起

可以異步執(zhí)行的放到一起

2,首頁耗時方法

到首頁的時候,我們埋點的時間,小于用戶看到數(shù)據(jù)的時間 這個是因為首頁加載的數(shù)據(jù)比較多 我們首頁同時加載了7個Fragment,同時請求10個以上接口

1,首頁做懶加載,保證App啟動接口只請求3個左右

2,首頁UI優(yōu)化,同時顯示出ui以后在執(zhí)行后面邏輯處理

3,首頁部分不重要邏輯做延時加載,比如請求升級彈窗等

總結(jié)

到此這篇關(guān)于關(guān)于Android冷啟動耗時優(yōu)化詳解的文章就介紹到這了,更多相關(guān)Android冷啟動優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android 管理Activity中的fragments

    Android 管理Activity中的fragments

    為了管理Activity中的fragments,需要使用FragmentManager,為了得到它,需要調(diào)用Activity中的getFragmentManager()方法,接下來詳細(xì)介紹,感興趣的朋友可以了解下哦
    2013-01-01
  • 詳解Android 全局彈出對話框SYSTEM_ALERT_WINDOW權(quán)限

    詳解Android 全局彈出對話框SYSTEM_ALERT_WINDOW權(quán)限

    本篇文章主要介紹了詳解Android 全局彈出對話框SYSTEM_ALERT_WINDOW權(quán)限,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Android Studio 實現(xiàn)文檔注釋的快捷鍵

    Android Studio 實現(xiàn)文檔注釋的快捷鍵

    這篇文章主要介紹了Android Studio 實現(xiàn)文檔注釋的快捷鍵,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android實現(xiàn)仿網(wǎng)易新聞的頂部導(dǎo)航指示器

    Android實現(xiàn)仿網(wǎng)易新聞的頂部導(dǎo)航指示器

    這篇文章主要介紹了Android實現(xiàn)仿網(wǎng)易新聞的頂部導(dǎo)航指示器的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • Android實現(xiàn)控件的縮放移動功能

    Android實現(xiàn)控件的縮放移動功能

    這篇文章主要介紹了android控件的縮放,移動功能,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-01-01
  • 淺談Android Studio 4.1 更新內(nèi)容

    淺談Android Studio 4.1 更新內(nèi)容

    這篇文章主要介紹了淺談Android Studio 4.1 更新內(nèi)容,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Android仿QQ長按彈出刪除復(fù)制框

    Android仿QQ長按彈出刪除復(fù)制框

    這篇文章主要為大家詳細(xì)介紹了Android仿QQ長按彈出刪除、復(fù)制、轉(zhuǎn)發(fā)框,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android中毛玻璃效果的兩種實現(xiàn)代碼

    Android中毛玻璃效果的兩種實現(xiàn)代碼

    這篇文章主要介紹了Android中毛玻璃效果的兩種實現(xiàn)代碼,第一種是使用JAVA算法FastBlur實現(xiàn),第二種是使用Android自帶類RenderScript 實現(xiàn),本文通過實例代碼介紹的非常詳細(xì),需要的朋友參考下吧
    2024-08-08
  • Android?Gradle模塊依賴替換使用技巧

    Android?Gradle模塊依賴替換使用技巧

    這篇文章主要為大家介紹了Android?Gradle模塊依賴替換使用技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Android ListView介紹及優(yōu)化方案

    Android ListView介紹及優(yōu)化方案

    這篇文章主要介紹了Android ListView介紹及優(yōu)化方案的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07

最新評論

玉环县| 灵川县| 綦江县| 卢氏县| 兴宁市| 明光市| 北京市| 哈巴河县| 长寿区| 沙湾县| 鄂尔多斯市| 桂平市| 平和县| 工布江达县| 宿州市| 屯昌县| 黎川县| 无棣县| 湟中县| 博罗县| 札达县| 沛县| 靖远县| 赤城县| 威信县| 小金县| 禹城市| 云霄县| 安新县| 惠水县| 明溪县| 石狮市| 隆德县| 布尔津县| 聂拉木县| 陇川县| 广元市| 上犹县| 轮台县| 永登县| 连云港市|