應用啟動優化 App Startup

2021-10-23 10:45:52 字數 2730 閱讀 6023

阿里巴巴開源的 alpha:基於pert圖構建的非同步啟動框架。

自定義啟動器 做初始化:基於有向無環圖拓撲排序的啟動框架。

implementation "androidx.startup:startup-runtime:1.0.0-alpha02"
public class sdk4initializer implements initializer

@nonnull

@override

public list>> dependencies()

}

在沒有衝突的情況下,使用合併衝突啟發式演算法,合併此標記中的所有屬性以及所有巢狀元素。它是節點合併的預設模式。

從合併後的清單中移除此元素。此標記在provider標籤下,將禁用所有元件初始化;在meta-data標籤下,將禁用單個元件初始化。

這裡必須指定為字串androidx_startup的值,否則宣告的元件不生效。

// 手動執行初始化邏輯
規律:a. 不宣告meta-data標籤,自動初始化失效,手動初始化依然可以生效

b. 宣告meta-data標籤,且新增了tools:node="remove",自動初始化失效,手動初始化依然可以生效

c. 不宣告meta-data標籤,自動初始化失效;若做為依賴項,其他元件初始化之前,初始化依然可以生效

d. 宣告meta-data標籤,且新增了tools:node="remove";若做為依賴項,其他元件初始化之前,初始化依然可以生效

通過實現 initializer介面,設定初始化的依賴項,自定義元件間的初始化順序

通過 android tools 命名空間,配置元件是否自動初始化

支援延遲初始化,即手動初始化

public inte***ce initializer
public final class initializationprovider extends contentprovider  else 

return true;

}...

}

private static final string section_name = "startup";

private static final object slock = new object();

// 快取已經初始化過的元件資訊

@nonnull

final map, object> minitialized;

@nonnull

final context mcontext;

minitialized = new hashmap<>();

}@nonnull

@suppresswarnings("unusedreturnvalue")

if (sinstance == null) }}

return sinstance;

}/**

* 用於延遲初始化(手動初始化)指定的元件

*/@nonnull

@suppresswarnings("unused")

public t initializecomponent(@nonnull class extends initializer> component)

@nonnull

@suppresswarnings()

t doinitialize(@nonnull class extends initializer>> component, @nonnull set> initializing)

// initializing儲存正在初始化的元件,這裡為了處理迴圈依賴問題

if (initializing.contains(component))

object result;

// 避免重複初始化

if (!minitialized.containskey(component)) }}

if (startuplogger.debug)

// 呼叫元件的create方法,執行具體的初始化邏輯

result = initializer.create(mcontext);

if (startuplogger.debug)

// 更改元件的初始化狀態,並快取結果

initializing.remove(component);

minitialized.put(component, result);

} catch (throwable throwable)

} else

return (t) result;

} finally }}

/*** 用於自動初始化

*/@suppresswarnings("unchecked")

void discoverandinitialize()

doinitialize(component, initializing);}}

}}} catch (packagemanager.namenotfoundexception | classnotfoundexception exception) finally

}} 參考:

Android 應用啟動速度優化

開發android應用中,隨著功能越來越多,啟動速度越來越慢。有沒有辦法讓自己應用啟動速度快一點呢?方法是人想出來的。先說說我的實現方法 1 將oncreate 中初始化的內容,移動到執行緒中做初始化,載入等 2 初始化完成之後,通過handler傳送訊息,3 hander 中收到訊息後,再初始化完...

Android 應用啟動速度優化

解決如下 style檔案中新增 1 style name parent android style theme.notitlebar.fullscreen 2 item name android windowbackground drawable splash item 3 item name an...

Android應用啟動時間優化

在android系統中把啟動分為冷啟動,熱啟動,溫啟動。三者的過程各不相同,其中以冷啟動過程最為繁瑣,時間消耗最長。所以市面上所說的啟動優化,一般都泛指冷啟動的優化。什麼是邏輯非同步?就是用多執行緒去替代之前單個主線程的工作,盡量保證讓oncreate流暢不被堵塞。那麼我們該怎麼設計呢?設計的思路我...