RxJava и смена ориентации экрана
RxJava и смена ориентации экрана
Всем хорошего вечера. После освоения одной темы, касательно RxJava осталось несколько вопросов.
Первое, на что я так и не смог найти решение, это поведения Observer при смене ориентации экрана. Можно ли при пересоздании активити, и восстановления данных текущего фрагмента, вернуть данные, которые обрабатывались Слушателем, до этого?
И еще один интересный момент, это обновление прогресса. Нашел размытый для себя ответ, но до конца его не понял, и в документации схожего не нашел. Я теоретически представляю, что прогресс нужно обновлять в onNext, каждой итерации, но как это реализовывается, пока не знаю...
Заранее спасибо, если будет кому помочь в этой теме.
Первое, на что я так и не смог найти решение, это поведения Observer при смене ориентации экрана. Можно ли при пересоздании активити, и восстановления данных текущего фрагмента, вернуть данные, которые обрабатывались Слушателем, до этого?
И еще один интересный момент, это обновление прогресса. Нашел размытый для себя ответ, но до конца его не понял, и в документации схожего не нашел. Я теоретически представляю, что прогресс нужно обновлять в onNext, каждой итерации, но как это реализовывается, пока не знаю...
Заранее спасибо, если будет кому помочь в этой теме.
Re: RxJava и смена ориентации экрана
Свой ответ на смену ориентации решился, при чем ответ был куда прощу, чем ожидалось. В своем фрагменте\активити, я всего навсего запоминаю состояние, и дальше по состояниям использую методы:
Код: Выделить всё
@Override
protected void onResume() {
super.onResume();
mSubscription = mObservable.subscribe(mSubscriber);
}
@Override
protected void onPause() {
super.onPause();
mSubscription.unsubscribe();
}
Re: RxJava и смена ориентации экрана
Теперь озадачился еще одним интересным вопросом. Если реактивное программирование использует шаблон проектирования публицист - подписчик. Может ли он заменить использование OttoBus и EventBus? Поискав в интернете, уже есть не один пример, где частично, или полностью отказываются от использования автобусов, в преимущество реактивного программирования. Есть ли форумчане с опытом в этой сфере, и могут ли они поделится своими мыслями в этой сфере.
Re: RxJava и смена ориентации экрана
Вообще-то, данный кусок кода совершенно не делает того, что ты хотел вначале
Таким образом, при пересоздании в простейшем случае ты ЗАНОВО подписываешься на тот же самый запрос и он будет осуществлен заново. Если это 3-5 секундный запрос - то это ОК. А если допустим, пользователь ввел данные и нажал на кнопку "зарегистрироваться", то тут надо действовать по-другому.
Это просто в коде привязка идет состояния активити и observable, чтобы не было утечек, не сохранялась ссылка в observable на активити.Можно ли при пересоздании активити, и восстановления данных текущего фрагмента, вернуть данные, которые обрабатывались Слушателем, до этого?
Таким образом, при пересоздании в простейшем случае ты ЗАНОВО подписываешься на тот же самый запрос и он будет осуществлен заново. Если это 3-5 секундный запрос - то это ОК. А если допустим, пользователь ввел данные и нажал на кнопку "зарегистрироваться", то тут надо действовать по-другому.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: RxJava и смена ориентации экрана
можно.Sk_games писал(а):Теперь озадачился еще одним интересным вопросом. Если реактивное программирование использует шаблон проектирования публицист - подписчик. Может ли он заменить использование OttoBus и EventBus? Поискав в интернете, уже есть не один пример, где частично, или полностью отказываются от использования автобусов, в преимущество реактивного программирования. Есть ли форумчане с опытом в этой сфере, и могут ли они поделится своими мыслями в этой сфере.
Своих мыслей у меня пока мало, могу лишь поделиться ссылками как это реализуется
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: RxJava и смена ориентации экрана
Можно еще раз. Т.е. когда я подписываюсь на изменения, запрос не возвращает данные, обработанные в предыдущий раз? От делает запрос еще раз?Это просто в коде привязка идет состояния активити и observable, чтобы не было утечек, не сохранялась ссылка в observable на активити.
Таким образом, при пересоздании в простейшем случае ты ЗАНОВО подписываешься на тот же самый запрос и он будет осуществлен заново. Если это 3-5 секундный запрос - то это ОК. А если допустим, пользователь ввел данные и нажал на кнопку "зарегистрироваться", то тут надо действовать по-другому.
Я просто ищу решения, допустим пользователь нажал зарегистрироваться в одном состоянии, мы слушателем создали новый поток и отправили туда данные на обработку. Все ок. Потом при повороте экрана, эти данные обнулились и обработка данных началась заново? А мне нужно вернуть данные из первой обработки, заместь того, что бы посылать их заново... Я все правильно понял, или уже запутался.
Re: RxJava и смена ориентации экрана
1. Как только ты подписываешься на обычный observable, то он начинает свои действия. А ты это как раз делаешь в onREsume
2. Для того, чтобы "поймать" результат, который был отправлен до перворота активити, нужно кешировать и вообще использовать например Subject-ы, либо retained фрагменты, короче там все не просто.
Попробуй как тут написано, но это для коротких запросов.
http://stablekernel.com/blog/replace-as ... -patterns/
2. Для того, чтобы "поймать" результат, который был отправлен до перворота активити, нужно кешировать и вообще использовать например Subject-ы, либо retained фрагменты, короче там все не просто.
Попробуй как тут написано, но это для коротких запросов.
http://stablekernel.com/blog/replace-as ... -patterns/
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: RxJava и смена ориентации экрана
Foenix
Что то мне подсказывает, что мы подходим по вопросу конкретного проектирования. Может правильным решением было бы создание главного класса, пула внутренних потоков, которым мы бы отдавали данные на обработку и получали бы с него, не беспокоясь о перевороте экрана. Так сказать выполненный RxBus... На мой взгляд это было бы верным решением, даже для мелких запросов. К сожалению, как это реализовать, я пока не знаю...
Еще одно замечание, по поводу сообщения выше. Был один пример взятый тут https://github.com/alphamu/RxAndroidDemo, там в одном из примером лайфцикла Observal, есть интересный момент. Там в потоке, с задержкой 1 секунду билдят стринг. Промежуточные результаты не выводят сразу же, а просто оставляют в Observal. Там вот там, после половины задания, строится строка "Hello", текущее состояние потока кешируется, и после поворота экрана, стринг продолжает билдиться на этом этапе и достраивает строку. Разве это нельзя считать тем, о чем зашла речь?
Что то мне подсказывает, что мы подходим по вопросу конкретного проектирования. Может правильным решением было бы создание главного класса, пула внутренних потоков, которым мы бы отдавали данные на обработку и получали бы с него, не беспокоясь о перевороте экрана. Так сказать выполненный RxBus... На мой взгляд это было бы верным решением, даже для мелких запросов. К сожалению, как это реализовать, я пока не знаю...
Еще одно замечание, по поводу сообщения выше. Был один пример взятый тут https://github.com/alphamu/RxAndroidDemo, там в одном из примером лайфцикла Observal, есть интересный момент. Там в потоке, с задержкой 1 секунду билдят стринг. Промежуточные результаты не выводят сразу же, а просто оставляют в Observal. Там вот там, после половины задания, строится строка "Hello", текущее состояние потока кешируется, и после поворота экрана, стринг продолжает билдиться на этом этапе и достраивает строку. Разве это нельзя считать тем, о чем зашла речь?
Re: RxJava и смена ориентации экрана
с чего ты это взял?Промежуточные результаты не выводят сразу же, а просто оставляют в Observal.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: RxJava и смена ориентации экрана
Foenix
Да, я ошибся, на счет вчерашнего примера. Обработка задания начинается заново, просто билдят стринг продолжают с того места. на котором произошел поворот экрана. Из за этого запутался...
Кстати есть решение, о котором я вначале заговорил - http://tttzof351.blogspot.com/2014/11/a ... ntbus.html. Единственная загвоздка, что автор не вникал в суть реактивного, где можно было бы полностью отказаться от автобуса.
Еще один полезный ресурс, о чем я говорил, вот здесь http://blog.danlew.net/2014/10/08/grokk ... va-part-4/ там ниже в пункте LifeCycle. Правда разбираться еще не пробовал. Как только что то выйдет, обязательно напишу. Было бы классно разобраться в использовании на весь проект такого шаблона, взамен привычным автобусам.
Да, я ошибся, на счет вчерашнего примера. Обработка задания начинается заново, просто билдят стринг продолжают с того места. на котором произошел поворот экрана. Из за этого запутался...
Кстати есть решение, о котором я вначале заговорил - http://tttzof351.blogspot.com/2014/11/a ... ntbus.html. Единственная загвоздка, что автор не вникал в суть реактивного, где можно было бы полностью отказаться от автобуса.
Еще один полезный ресурс, о чем я говорил, вот здесь http://blog.danlew.net/2014/10/08/grokk ... va-part-4/ там ниже в пункте LifeCycle. Правда разбираться еще не пробовал. Как только что то выйдет, обязательно напишу. Было бы классно разобраться в использовании на весь проект такого шаблона, взамен привычным автобусам.
Re: RxJava и смена ориентации экрана
да все эти ссылки я знаю) Там толком мало полезного.
Вот посмотри
http://nerds.weddingpartyapp.com/tech/2 ... ava-rxbus/
не ограничивайся русским интернетом, там очень мало информации..
Вот посмотри
http://nerds.weddingpartyapp.com/tech/2 ... ava-rxbus/
не ограничивайся русским интернетом, там очень мало информации..
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: RxJava и смена ориентации экрана
Foenix
Да никто русским контентом не ограничивается, наоборот Не хватало мне... Просто по запросу "RxJava as event bus" на третий странице была вот такая статья...
Да никто русским контентом не ограничивается, наоборот Не хватало мне... Просто по запросу "RxJava as event bus" на третий странице была вот такая статья...
Re: RxJava и смена ориентации экрана
есть еще ютуб, там вообще больше всего инфы
Я если честно тоже не особо понимаю, почему этот вопрос такой проблемный ( с переворотами). Ведь эта такая нужная штука, котороая в каждом проекте юзается (почти), и я думала что этот вопрос должен быть давно отработан, так сказать. Ан нет.
Я если честно тоже не особо понимаю, почему этот вопрос такой проблемный ( с переворотами). Ведь эта такая нужная штука, котороая в каждом проекте юзается (почти), и я думала что этот вопрос должен быть давно отработан, так сказать. Ан нет.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: RxJava и смена ориентации экрана
Foenix
Кто говорит, что вопрос проблемный?! Разве не интересно, открыть для себя мощность реактивной библиотеки. Как будто сейчас проблема вставить обработку в отдельный тред сервиса и биндить результат независимо от ориентации экрана! Тут суть вопроса, не о перевороте экрана, а о поведении в случае с RxJava...
1) Пример реализации реактивного автобуса, на самом деле уже была решена, в наработанных примерах. Если нужно, оставьте коммент, скину проект. Все работает, как и предполагалось отлично...
2) По поводу кеширования и возобновления результатов. После нескольких проектов, и не одной статьей с описанием, (Пример - Пункт Lifecycle) http://blog.danlew.net/2014/10/08/grokk ... va-part-4/ Восстановить сессию работы Observables, можно с функциями cache() (or replay()) . Вручную добавив данные на загрузку и перевороте экрана, следующая загрузка начиналась исходя из результатов предыдущей обработки. Все это подтверждено на практике. Если надо будут эти примеры. Пишите в эту тему.
Кто говорит, что вопрос проблемный?! Разве не интересно, открыть для себя мощность реактивной библиотеки. Как будто сейчас проблема вставить обработку в отдельный тред сервиса и биндить результат независимо от ориентации экрана! Тут суть вопроса, не о перевороте экрана, а о поведении в случае с RxJava...
1) Пример реализации реактивного автобуса, на самом деле уже была решена, в наработанных примерах. Если нужно, оставьте коммент, скину проект. Все работает, как и предполагалось отлично...
2) По поводу кеширования и возобновления результатов. После нескольких проектов, и не одной статьей с описанием, (Пример - Пункт Lifecycle) http://blog.danlew.net/2014/10/08/grokk ... va-part-4/ Восстановить сессию работы Observables, можно с функциями cache() (or replay()) . Вручную добавив данные на загрузку и перевороте экрана, следующая загрузка начиналась исходя из результатов предыдущей обработки. Все это подтверждено на практике. Если надо будут эти примеры. Пишите в эту тему.
Re: RxJava и смена ориентации экрана
вообще-то это проблемный вопрос по-определению
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198