带有 ViewModel 和 Lifecycleowner 的 App Widget
App Widget with ViewModel and Lifecycleowner
我在我的项目中使用 MVVM。但是当我创建 App Widget 时,他不支持 updateAppWidget()
中的 LifecycleOwner
var model: CurrencyViewModel
model = ViewModelProvider(this).get(CurrencyViewModel::class.java)
我有机会从 App Widget 访问模型吗?
这不是 ViewModelProvider 的用途。当小部件为 运行 时,activity 可能会与其 ViewModel 一起被销毁。 AppWidgetProvider 本身并没有真正的生命周期。
如果您想从应用程序获取数据到应用程序小部件,您应该将其保存在 SharedPreferences 或数据库中。
/**
* Creates a {@link ViewModelProvider}, which retains ViewModels while a scope of given Activity
* is alive. More detailed explanation is in {@link ViewModel}.
* <p>
* It uses the {@link FragmentActivity#getDefaultViewModelProviderFactory() default factory}
* to instantiate new ViewModels.
*
* @param activity an activity, in whose scope ViewModels should be retained
* @return a ViewModelProvider instance
* @deprecated Use the 'by viewModels()' Kotlin property delegate or
* {@link ViewModelProvider#ViewModelProvider(ViewModelStoreOwner)},
* passing in the activity.
*/
@Deprecated
@NonNull
@MainThread
public static ViewModelProvider of(@NonNull FragmentActivity activity) {
return new ViewModelProvider(activity);
}
我在我的项目中使用 MVVM。但是当我创建 App Widget 时,他不支持 updateAppWidget()
中的 LifecycleOwnervar model: CurrencyViewModel
model = ViewModelProvider(this).get(CurrencyViewModel::class.java)
我有机会从 App Widget 访问模型吗?
这不是 ViewModelProvider 的用途。当小部件为 运行 时,activity 可能会与其 ViewModel 一起被销毁。 AppWidgetProvider 本身并没有真正的生命周期。
如果您想从应用程序获取数据到应用程序小部件,您应该将其保存在 SharedPreferences 或数据库中。
/**
* Creates a {@link ViewModelProvider}, which retains ViewModels while a scope of given Activity
* is alive. More detailed explanation is in {@link ViewModel}.
* <p>
* It uses the {@link FragmentActivity#getDefaultViewModelProviderFactory() default factory}
* to instantiate new ViewModels.
*
* @param activity an activity, in whose scope ViewModels should be retained
* @return a ViewModelProvider instance
* @deprecated Use the 'by viewModels()' Kotlin property delegate or
* {@link ViewModelProvider#ViewModelProvider(ViewModelStoreOwner)},
* passing in the activity.
*/
@Deprecated
@NonNull
@MainThread
public static ViewModelProvider of(@NonNull FragmentActivity activity) {
return new ViewModelProvider(activity);
}