2016-05-05 7 views
1

У меня есть код, который хочет отслеживать доступную Wi-Fi сеть, независимо от того, работает оно или нет.Смутно о Android BroadcastReceiver & Service

на основе некоторого образца я нашел в Интернете, я делаю следующее:

  1. Регистрация соответствующий WakefulBroadcastReceiver
  2. В приемнике сгореть Intent который начинается один из моих IntentService
  3. Наконец, в сервисе проанализируйте результаты и сохраните их в статической переменной (должно быть доступно для всего процесса).

Надеюсь, все мое приложение работает в одном процессе (я думаю, что я увидел флаг, чтобы указать, что один день .. не знаю, где ..)

Теперь у меня несколько вопросов:

  • Почему бы не выполнить работу в приемнике, зачем запускать сервис?
  • Зачем использовать приемник Wakeful вместо обычного приемника? В частности, если работа перенаправляется на услугу
  • Будет ли мой сервис и активность моего приложения в том же процессе? Вид необходимых для обмена данными через статические переменные ...

ответ

0

Хорошо, что-то еще. Если вы хотите общаться с сервисом, вам необходимо использовать ServiceConnection и подключиться к нему посредством «привязки». Если вы привязаны к услуге после, она была запущена, тогда служба будет сохраняться в фоновом режиме за пределами жизненного цикла активности.

Для привязки к услуге:

public ServiceConnection mServiceConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     // initialize the service and bind to the tracking service 
     YourService.YourBinder binder = (YourService.YourBinder) service; 
     mService = binder.getService(); 
     mBound = true; 
     } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     } 
    }; 

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

Итак, ваше обслуживание не будет в одном процессе - это совершенно другая тема.

Вы можете хранить свои данные в самой службе и получать к ней доступ , ставя общедоступный метод getData() в вашу службу; вы можете получить доступ к этому методу, используя переменную mService, как указано выше.

Наконец, если вы хотите связаться со службой для своей деятельности, вы отправите намерение BroadcastReceiver.

+1

'Наконец, если вы хотите связаться с сервисом для своей деятельности, вы отправите намерение BroadcastReceiver.' на самом деле не так, как вы сказали:« Если вы хотите общаться с сервисом, вам нужно использовать ServiceConnection и подключитесь к нему путем привязки "- так используйте привязку - он может отлично работать в обоих направлениях – pskink

+0

^хорошая точка, приемник не нужен –

Смежные вопросы