ViewModel源码分析
创建
//activity/activity-ktx/src/main/java/androidx/activity/ActivityViewModelLazy.kt
@MainThread
inline fun <reified VM : ViewModel> ComponentActivity.viewModels(
noinline factoryProducer: (() -> Factory)? = null
): Lazy<VM> {
//如果Factory为空则调用getDefaultViewModelProviderFactory获取Factory
//默认的Factory对象时SavedStateViewModelFactory
val factoryPromise = factoryProducer ?: {
defaultViewModelProviderFactory
}
//创建ViewModelLazy
//调用getViewModelStore方法获取ViewModelStore
return ViewModelLazy(VM::class, { viewModelStore }, factoryPromise)
}//activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@NonNull
@Override
public ViewModelProvider.Factory getDefaultViewModelProviderFactory() {
if (getApplication() == null) {
throw new IllegalStateException("Your activity is not yet attached to the "
+ "Application instance. You can't request ViewModel before onCreate call.");
}
if (mDefaultFactory == null) {
mDefaultFactory = new SavedStateViewModelFactory(
getApplication(),
this,
getIntent() != null ? getIntent().getExtras() : null);
}
return mDefaultFactory;
}ViewModelProvider
ViewModelStore
Factory

最后更新于