Какой смысле использовать Observable?

224
23 марта 2017, 19:35

Какой смысле использовать Observable и Observer Если есть AsyncTask. Там тоже есть конечный метод, промежуточный и метод перед запуском класса...

Answer 1

Дело в том, что Observer и AsyncTask выполняют совершенно разные задачи и никакой речи о их взаимозаменяемости не идет, хотя бы у них обоих и есть какие то методы для действий в начале, в процессе выполнения и при завершении операции.

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

Observer (наблюдатель) - это поведенческий паттерн проектирования, предназначенный для уведомления о изменении состояния в наблюдаемом объекте (например изменились данные и их нужно обработать). При этом инициатором сигнала является сам наблюдаемый объект, а классы, подписанные на уведомления от наблюдаемого объекта получат этот сигнал.

В фреймворке Android ближе к Observer по принципу действия находится BroadcastReceiver (широковещательные сообщения) - данный класс реализует поведенческий паттерн проектирования издатель-подписчик.
Разница между ними в моменте подачи сигнала ( вообще бродкаст это улучшенный обсервер). Если Observer реагирует на изменение состояния наблюдаемого объекта и связан с ним, то Broadcast может извещать о чем угодно - это рассылка сообщений в эфир всем заинтересованным в этой рассылке.

Отвлеченно, на живых примерах, AsyncTask можно сравнить с многополосной дорогой - у нас много груза и мы можем отправлять грузовики одновременно по нескольким полосам, чтобы быстрее доставить весь груз.

Observer с сигнализацией в машине. Сама сигнализация это Observer машины, вы - Observable, подписчик на события сигналки через брелок от нее. Когда состояние машины изменяется (кто то пытается ее прибрать себе) вы получаете уведомление об этом печальном событии и можете действовать, спасая свое добро.

Broadcast - с радиостанцией. Ни кто иной, а сам президент нашей Родины, придумал очень важный указ, его зачитали по радио и тогда заинтересованные лица тут же смогли исполнять указания, так как они все время слушают это радио.

Как видите, все они имеют свои особенные функции и каким то образом не могут заменять друг друга, особенно дорога и сигнализация :)

READ ALSO
Отправка сообщения от сервера к клиенту через сокет

Отправка сообщения от сервера к клиенту через сокет

В потоке run() строка: clientSocketgetOutputStream()

296
Невозможно найти файл конфигурации log4j2

Невозможно найти файл конфигурации log4j2

Почему невозможно найти log4j2 файл конфигурации хотя файл добавленПути файла менял на различные, все равно не находит

378