Ответ 1
Это контекст приложения.
public abstract void onReceive (Context context, Intent intent)
Когда я создаю экземпляр BroadcastReceiver, и когда onReceive() вызывается инфраструктурой Android, каков контекст, переданный методу onReceive()? Это контекст активности? контекста приложения?
Спасибо.
Это контекст приложения.
public abstract void onReceive (Context context, Intent intent)
Это контекст, в котором работает приемник. Например, если широковещательное сообщение отправлено из UsbManager, контекст является контекстом UsbManager.
Дополнительная информация: BroadcastReceiver
Исторически это экземпляр ReceiverRestrictedContext
, но этот класс отсутствует в последних версиях Android (не тот уровень API точно, но он не присутствует в источниках API 26), поэтому теперь это должен быть ваш контекст приложения.
ReceiverRestrictedContext
не удалось зарегистрировать BroadcastReceiver
из BroadcastReceiver
.
Поскольку экземпляр ReceiverRestrictedContext
создается каждый раз при создании экземпляра BroadcastReceiver
, вы должны быть осторожны, чтобы не передавать его компоненту, имеющему жизненный цикл дольше, чем ваш (очень короткий) BroadcastReceiver
, или вы бы создайте утечки памяти на этих старых (не так сильно) версиях Android, которые имеют этот ReceiverRestrictedContext
.
Вы можете безопасно позвонить getApplicationContext()
и передать его результат более долговечному компоненту.
Обратите внимание, что факт ReceiverRestrictedContext
исчез из последних версий Android, не означает, что вы можете сделать "BroadcastReceiverCeption"!