2013-06-14 2 views
0

Я хочу начать вещание класса приемника из основного приложения моего приложения. В основной деятельности есть все инструменты GUI, это действие запускает сервис, который выполняет всю работу. Для запуска этой службы после перезагрузки я написал класс вещательного приемника. Теперь я запутался, где можно назвать широковещательный приемный класс.Вызов приемника BroadCast из основного вида деятельности android

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

С уважением

+0

Следует ли также называть его, когда пользователь запускает ваше приложение? –

+0

yes offcourse .. – Naruto

ответ

0

В качестве решения можно применить свой собственный фильтр намерений к BroadcastReceiver, зарегистрировать его, а затем позвонить sendBroadcast() в своей деятельности только после регистрации получателя. Предположим, что вы сравниваете намерения, которые поступают в ваш приемник внутри метода onReceive().

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

И вы также можете добавить android.intent.action.BOOT_COMPLETED фильтр намерений, чтобы начать свой приемник после того, как устройства; загрузка

+0

Что нужно для вызова приемника, если приемник запускает услугу? –

0

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

public class BroadcastHelper { 

public static void sendBroadcast(Context context, String message, Serializable value) { 

    Intent broadcastIntent = new Intent(); 
    broadcastIntent.setAction(message); 
    broadcastIntent.putExtra(Constants.BROADCAST_MESSAGE, value); 
    context.sendBroadcast(broadcastIntent); 

} 

}

Не забудьте зарегистрировать приемник в файле манифеста.

Используя этот подход, мы не создадим новые экземпляры любого класса, кроме самого намерения, которое будет собираться мусором.

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