... потому что система должна была бы создать экземпляр большого объекта Activity, чтобы просто создать экземпляр получателя?
Да, как и любой другой нестатический внутренний класс.Он должен получить экземпляр внешнего класса откуда-то (например, путем создания экземпляра или каким-либо другим механизмом), прежде чем он сможет создать экземпляры (нестатического) внутреннего класса.
Глобальные широковещательные приемники, которые вызываютсяиз намерений в файле манифеста, которые будут автоматически создаваться системой, нет такого внешнего экземпляра, который можно использовать для создания экземпляра нестатического внутреннего класса получателя вещания.Это не зависит от того, что представляет собой внешний класс, «Активность» или «нет».
Однако, если вы используете приемник как часть работы с действием, вы можете вручную создать экземпляр широковещательного приемника в действии (пока одиниз обратных вызовов действий у вас есть экземпляр внешнего класса, с которым нужно работать: this
), а затем зарегистрируйте / отмените его регистрацию соответствующим образом:
public class MyActivity extends Activity {
private BroadcastReceiver myBroadcastReceiver =
new BroadcastReceiver() {
@Override
public void onReceive(...) {
...
}
});
...
public void onResume() {
super.onResume();
....
registerReceiver(myBroadcastReceiver, intentFilter);
}
public void onPause() {
super.onPause();
...
unregisterReceiver(myBroadcastReceiver);
}
...
}