Механизм передачи данных из одного обратного вызова в другой

Все объекты гарантированно имеют метод .equals(), поскольку Object содержит метод, .equals(), который возвращает логическое значение. Задача подкласса переопределять этот метод, если требуется дополнительное определение определения. Без него (т. Е. Используя ==) только адреса памяти проверяются между двумя объектами для равенства. String переопределяет этот метод .equals() и вместо использования адреса памяти возвращает сравнение строк на уровне символа для равенства.

Ключевое замечание состоит в том, что строки хранятся в одном пуле, поэтому после создания строки он всегда хранится в программе по тому же адресу. Строки не меняются, они неизменяемы. Вот почему это плохая идея использовать регулярную конкатенацию строк, если у вас есть серьезное количество обработки строк. Вместо этого вы будете использовать предоставленные классы StringBuilder. Помните, что указатели на эту строку могут измениться, и если вам было интересно увидеть, были ли два указателя одинаковыми ==, это был бы прекрасный способ. Строки сами не делают.

0
задан Fantômas 25 February 2019 в 07:58
поделиться

2 ответа

Bus-Message (ориентированный на события) способ может соответствовать вашей проблеме. F.E. у нас есть класс SomeEventHappenedMessage с некоторыми данными внутри. Когда происходит какое-либо событие, сообщение отправляется через шину, и слушатели получают его.

Вы можете написать свою собственную шину или использовать библиотеку EventBus https://github.com/greenrobot/EventBus для отправки и получения сообщений / событий.

Псевдокод:

//listener registers/unregisters when needed
Bus.register()
Bus.unregister()

//listener listens for message
onMessage(SomeEventHappenedMessage msg) {
    if msg.hasSomeData {
         music.play()
    } else {
         music.stop()
    }
}

//message being sent
SomeEventHappenedMessage message = (message creation)
Bus.sendMessage(message)
0
ответ дан Niobij 25 February 2019 в 07:58
поделиться

Для такого рода логики обратного вызова, которая требует перекрестного взаимодействия с различными задачами и потоками, я обычно использую Reactive Extensions для Android (RxAndroid), в частности Observables.

https://github.com/ReactiveX/RxAndroid

Вы можете создавать и просматривать Observables в разных потоках, в основном подписываясь на просмотр переменной, затем, когда значение меняет ваше приложение логика может реагировать на изменения.

Подробнее о многопоточности и RxJava читайте здесь:

https://blog.gojekengineering.com/multi-threading-like-a-boss-in-android-with-rxjava- 2-b8b7cf6eb5e2

В зависимости от архитектуры вашего приложения хорошим способом для этого является наличие центрального диспетчера данных приложения, к которому могут обращаться другие компоненты. Установив Observables в Диспетчере данных приложения, другие компоненты приложения могут затем подписаться, чтобы наблюдать за интересующими их переменными и реагировать на изменения.

Обычно я основываю свои приложения для Android на базе Java на удивительной архитектуре MVP для Android от Mindorks, в которой широко используются RxJava и Observables.

https://github.com/MindorksOpenSource/android-mvp-architecture

0
ответ дан WildStyle 25 February 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: