Можно ли использовать LiveData в AppWidgetProvider? - PullRequest
0 голосов
/ 25 сентября 2018

В моем старом приложении именно так я выполняю трудоемкие операции ввода-вывода в функции AppWidgetProvider onUpdate.

public class MyAppWidgetProvider extends AppWidgetProvider {
    private static ExecutorService thread_executor = java.util.concurrent.Executors.newFixedThreadPool(1);

    @Override
    public void onUpdate(
        Runnable runnable = ...
        thread_executor.execute(runnable);

Не думаю, что этохороший способ, особенно это касается Android 8.

Мне нравится концепция LiveData, так как нам не нужно явно обрабатывать потоки.Тем не менее, это позволяет нам выполнять трудоемкую операцию, не блокируя главный поток.

Мне было интересно, можно ли использовать LiveData и присоединить Observer для выполнения трудоемкого ввода-выводаоперация (как чтение из базы данных SQLite), в пределах AppWidgetProvider?

Я не совсем уверен, как это сделать, поскольку я понятия не имею, как я могу получить LifecycleOwner в AppWidgetProvider, чтобы наблюдать LiveData.

1 Ответ

0 голосов
/ 19 апреля 2019

Да, вы можете использовать LiveData из AppWidgetProvider.Есть два способа (я знаю), что вы можете получить LifecycleOwner:

  1. Вы можете позвонить ProcessLifecycleOwner.get().
  2. Вы можете повторить пример из этого ответа .

Оба метода работают, вам решать, какой из них вы хотите использовать.

НО:

Вам не нужен LifecycleOwner, вы можете использовать liveData.observeForever(Observer).Фактически, это может привести к некоторым ошибкам, если вы используете LifecycleOwner: когда владелец переходит в состояние DESTROYED, ваш наблюдатель не будет вызываться 1 .

Не забывайте звонить liveData.removeObserver(Observer).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...