Виджет приложения с ViewModel и Lifecycleowner - PullRequest
0 голосов
/ 20 апреля 2020

Я использую MVVM в своем проекте. Но когда я создаю виджет приложения, он не поддерживает LifecycleOwner в updateAppWidget ()

var model: CurrencyViewModel
model = ViewModelProvider(this).get(CurrencyViewModel::class.java)

Есть ли у меня возможность доступа к модели из виджета приложения?

1 Ответ

0 голосов
/ 21 апреля 2020

Это не то, для чего предназначен ViewModelProvider. Когда виджет работает, активность может быть уничтожена вместе с его ViewModels. Сам 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);
    }
...