Должно ли мое приложение mvvm, liveata отменять сетевые запросы, когда приложение находится в фоновом режиме?

Использование компонентов архитектуры Google mvvm

Я предполагаю, что Facebook не отменяет попытку загрузки вашей ленты, когда вы нажимаете кнопку «Назад».


person Daniel Wilson    schedule 05.01.2018    source источник


Ответы (1)


public class YourViewModel {
    private WeakReference<Lifecycle> lifeCycle;
    public YourViewModel(LifeCycle liefcycle){
        this.lifeCycle = new WeakReference<>(lifecycle);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    if(this.lifeCycle.get() != null){
         // do cancel your network request here
    }
}

// your activity
public class YourActivity extends AppCompatActivity {
    YourViewModel viewModel;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        viewModel = new YourViewModel(this.getLifeCycle());
    }
}

Я думаю, вы можете отслеживать жизненный цикл вашего хост-контейнера (активность или фрагмент), а в событии destory notify отменять операции сетевого запроса.

person yu wang    schedule 05.01.2018
comment
Правильно, это похоже на способ сделать это, поэтому я предполагаю, что мой вопрос теперь находится в образце Google, как получить доступ к запросу? Эти запросы похожи на 3 уровня внутри NetworkBoundResource внутри репозитория. Хм... - person Daniel Wilson; 05.01.2018
comment
В вашей модели просмотра у вас должен быть репозиторий, поэтому просто вызовите репозиторий, чтобы очистить сетевой вызов. - person yu wang; 08.01.2018
comment
Верно, но вы можете видеть NetworkBoundResource, к которому привязаны вызовы модернизации, верно? Они предоставляют только запрос api в репозитории, например githubService.getRepo(owner, name);. Возможно, это не лучший шаблон, потому что нет прямого доступа к объекту модификации Call - person Daniel Wilson; 08.01.2018
comment
Да, вы правы, я не использую образец шаблона Google, но я думаю, что вы могли бы сделать что-нибудь в LiveDataCallAdapter.java, изменить его, чтобы отобразить функцию отмены, просто предложение. - person yu wang; 09.01.2018
comment
Это просто показывает, как передать жизненный цикл модели просмотра, но не показывает, как очистить сетевой запрос при репо. - person zemaitis; 08.10.2018