Android 啟動優(yōu)化

一、 啟動白屏優(yōu)化

解決啟動白屏問題
再啟動app時展示一張靜態(tài)圖 ,實(shí)現(xiàn)方法是 給splash頁面設(shè)置theme主題 ,主題設(shè)置background 背景圖代替白屏頁,展示完成背景圖和splash之后, 在mainactivity oncreat()之前把系統(tǒng)appTheme設(shè)置回來。
步驟:
定義閃屏圖
定義閃屏主題
設(shè)置主題
換回主題
1 定義閃屏圖
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white" />
<item>
<bitmap
android:gravity="fill"
android:src="@drawable/splash_bg" />
</item>
2 定義splash頁主題
<style name="SplashTheme" parent="Theme.MaterialSheetFab.Base">

<item name="colorPrimary">@color/transparent</item>
<item name="colorPrimaryDark">@color/transparent</item>
<item name="colorAccent">@color/main_color</item>
<item name="android:windowBackground">@drawable/splash</item>
<item name="android:selectableItemBackgroundBorderless" tools:targetApi="lollipop">@null </item>
</style>
</layer-list>
3 是在清單文件中設(shè)置 Theme。
<activity
android:name=".activity.SplashActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true"
android:theme="@style/SplashTheme"
android:launchMode="singleTask"
android:screenOrientation="portrait">
4 第四步是在調(diào)用 super.onCreate 方法前切換回來
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_home);
checkNotifyPermisson();
}
二、冷啟動時優(yōu)化方法
測試首屏啟動耗時 adb命令
adb 命令 首屏啟動時間測量
adb shell am start -W com.xxx.xxx(包名)/com.xxx.xxx.activity.SplashActivity(splash頁全路徑)

優(yōu)化方法 大致思路1 把需要啟動的第三方sdk init代碼放在子線程或者intentservice 中異步初始化 ,同時還要保證在用到第三方sdk方法時sdk已經(jīng)初始化完成 不影響方法使用
思路2 延遲第三方初始化 handler.postdelay() 進(jìn)行延遲,但是延遲時間不好確定
優(yōu)化方法按照思路1 利用第三方庫LaunchStarter進(jìn)行初始化sdk
public class MyApplication extends Application {

private static final String TAG = "MyApplication";

@Override
public void onCreate() {
    super.onCreate();
    
    TaskDispatcher.init(getBaseContext());
    TaskDispatcher taskDispatcher = TaskDispatcher.createInstance();

    // task2依賴task1;
    // task3未完成時taskDispatcher.await()處需要等待;
    // test4在主線程執(zhí)行
    //每個任務(wù)都耗時一秒
    Task1 task1 = new Task1();
    Task2 task2 = new Task2();
    Task3 task3 = new Task3();
    Task4 task4Main = new Task4();

    taskDispatcher.addTask(task1);
    taskDispatcher.addTask(task2);
    taskDispatcher.addTask(task3);
    taskDispatcher.addTask(task4Main);

    Log.i(TAG, "onCreate: taskDispatcher.start()");
    taskDispatcher.start();//開始

    taskDispatcher.await();//等task3完成后才會往下走
    Log.i(TAG, "onCreate: end.");
}

作者:胡飛洋
鏈接:https://juejin.cn/post/6854573215474253838
來源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

參考:https://juejin.cn/post/6844903919580086280
啟動器 https://github.com/zeshaoaaa/LaunchStarter

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容