Android - При каких обстоятельствах / случае использования я бы хотел реализовать пользовательский LifecycleOwner - PullRequest
0 голосов
/ 14 января 2020

https://developer.android.com/topic/libraries/architecture/lifecycle#implementing -lco

В документах говорится, что Fragments and Activities in Support Library 26.1.0 and later already implement the LifecycleOwner interface. Это очень полезно, если мы можем использовать LifecycleOwner действия или фрагмента для регистрации объектов LiveData или вызвать его наши методы помечены

@OnLifecycleEvent(Lifecycle.Event.ON_START)
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
etc

в наших пользовательских классах.

Но у нас также есть возможность реализовать пользовательский LifecycleOwner. При каких обстоятельствах имеет смысл иметь собственный LifecycleOwner, учитывая, что это усложнит ситуацию, потому что теперь мы должны вручную отслеживать события жизненного цикла, такие как:

mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
etc

?

1 Ответ

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

Я думаю, что могу ответить на этот вопрос сам, случай использования, где использование пользовательского LifecycleOwner имеет смысл использовать, если у вас нетипичный жизненный цикл, означающий жизненный цикл, отличный от одного действия и фрагментов.

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

Это поведение важно: реклама должна быть загружена в фоновом режиме (экран выключен), и когда пользователь включает экран, оно появляется для просмотра пользователем. it.

Выполнение фрагментной транзакции при выключенном экране означало, что транзакция произойдет после вызова onStop() действия, и это возможно только с использованием commitAllowingStateLoss().

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

Поэтому мне пришлось создать пользовательский LifecycleOwner для использования с объектом LiveData, который бы наблюдал изменения данных, которые должны были быть переданы к фрагментам.

Эта пользовательская реализация LifecycleOwner будет игнорировать состояние остановки действия, и таким образом LiveData может реагировать на изменения данных, даже когда действие было в состоянии остановки.

...