Недостатки в регистрации получателей как по активности, так и по обслуживанию? - PullRequest
0 голосов
/ 08 октября 2018

Сценарий такой: у меня есть активность и услуга.Есть несколько вещей, которые нужно отправить между обоими:

  • действие может запросить службу, чтобы узнать, работает ли
  • действие может запросить службу для значения переменной
  • действие может попросить службу выполнить действие (запустить его метод)

  • служба может отправить ответ на действие на действие

  • служба может ответить на вызов активности на вызов

Поскольку это выглядит скорее как двусторонняя связь, я думаю об использовании LocalBroadcastManager и что-то вроде:

public class MyActivity extents Activity{

   private void receiver = new BroadcastReceiver(){
      onReceive(){
        //Handle Message from Service
      }
  }

  onResume -> LocalBroadcastManager.registerReceiver(receiver);
  onPause  -> LocalBroadcastManager.unregisterReceiver(); 
} 

и для службы

public class MyService extents Service{

   private void receiver = new BroadcastReceiver(){
      onReceive(){
        //Handle Message from Activity
      }
  }

  onStart-> LocalBroadcastManager.registerReceiver(receiver);
  onDestroy-> LocalBroadcastManager.unregisterReceiver(); 
} 

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

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Похоже, что ваша деятельность должна просто привязаться к сервису, чтобы получить экземпляр Binder, который вы можете использовать для доступа к методам сервиса.Служба может отправлять локальные широковещательные сообщения, которые активность может наблюдать с помощью широковещательных приемников.В последнее время я предпочитаю, чтобы сервисные методы возвращали экземпляры LiveData, которые можно наблюдать вместо этого.Объекты LiveData осведомлены о жизненном цикле, поэтому любой наблюдатель будет знать, что нужно убирать за собой.

0 голосов
/ 08 октября 2018

Не должно быть.

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

В комментарии вы упомянули, что привязка к Сервису - это обычно то, что нужно делать для Действия-> Сервисное общение.Вам не нужно использовать это в большинстве случаев.Привязка службы раздражает, так как она не мгновенная, и вам нужно использовать прослушиватель для хранения ссылки на Binder.Вещания, в сравнении, относительно просты.

...