Назад к вопросам
Middle
76
questionbank

Какие виды BroadcastReceiver вы знаете?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

  1. Ordered Broadcast:

    • Широковещательная рассылка доставляется получателям последовательно, один за другим.
    • Каждый получатель может обработать или изменить результат рассылки, а также прервать ее, чтобы она не дошла до следующих получателей.
    • Порядок доставки определяется приоритетом получателя (android:priority в манифесте).
  2. Normal Broadcast:

    • Самый распространенный тип.
    • Широковещательное сообщение отправляется сразу всем заинтересованным получателям, зарегистрированным как объявленными (в манифесте), так и динамически (через Context.registerReceiver()).
    • Порядок получения сообщений не гарантируется.
    • Получатель не может остановить распространение сообщения.
  3. Local Broadcast:

    • Используется для обмена сообщениями только в пределах одного приложения.
    • Реализован классом LocalBroadcastManager.
    • Более эффективен и безопасен, так как сообщения не выходят за пределы приложения и не затрагивают другие приложения в системе.
    • Не требует объявления получателей в манифесте.
    • Уменьшает нагрузку на систему по сравнению с глобальными рассылками.
// Пример регистрации динамического BroadcastReceiver
BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Логика обработки сообщения
    }
};

IntentFilter filter = new IntentFilter("MY_ACTION");
registerReceiver(myReceiver, filter);

// Пример отправки Normal Broadcast
Intent broadcastIntent = new Intent("MY_ACTION");
sendBroadcast(broadcastIntent);

// Пример использования LocalBroadcastManager
// Получение экземпляра
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);

// Регистрация
localBroadcastManager.registerReceiver(myReceiver, filter);

// Отправка
localBroadcastManager.sendBroadcast(broadcastIntent);

// Пример отправки Ordered Broadcast
// sendOrderedBroadcast(orderedBroadcastIntent, null); // Можно указать permission