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

關(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)文章

最新評論