阿里巴巴開源的 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流暢不被堵塞。那麼我們該怎麼設計呢?設計的思路我...