BroadcastReceiver как внутренний class

Я знаю, что BroadcastReceiver нельзя использовать, если он определен как внутренний class Activity. Но мне интересно, почему? Это потому, что система должна была бы создать экземпляр большого объекта Activity чтобы просто создать экземпляр экземпляра приемника?

… потому что система должна была бы создать экземпляр большого объекта Activity только для того, чтобы инсталлировать экземпляр получателя?

Да, как и любой другой нестатический внутренний class. Он должен получить экземпляр внешнего classа где-нибудь (например, путем создания экземпляра или каким-либо другим механизмом), прежде чем он сможет создать экземпляры (нестатического) внутреннего classа.

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

Однако, если вы используете приемник как часть работы с активностью, вы можете вручную создать экземпляр широковещательного приемника самостоятельно (в то время как один из обратных вызовов активности, у вас есть экземпляр внешнего classа для работы с: 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); } ... } 
  • Частные внутренние classы в C # - почему они не используются чаще?
  • Как можно получить доступ к «этому» из внешнего classа из внутреннего classа?
  • Java: вызов метода внешнего classа в анонимном внутреннем classе
  • Почему внутренние classы Java требуют «конечных» внешних переменных экземпляра?
  • Внутренний class и локальные переменные
  • Могут ли внутренние classы получить доступ к закрытым переменным?
  • Вызвать метод активности из classа BroadcastReceiver
  • Создание внутреннего classа
  • Внутренний class Java и статический вложенный class
  • Почему внутренние classы делают доступными частные методы?
  • Android + MySQL с помощью com.mysql.jdbc.Driver
  • Interesting Posts

    Установить цвет заголовка вкладки

    Что заставляет Android ContentResolver.query () вернуть null?

    Можно рассчитать MD5 (или другой) хеш с буферизованным чтением?

    Почему принтер HP 6L внезапно прекратил работу? Я не могу заставить его начать

    Выяснение, какие каталоги используют наибольшее пространство на окнах

    Вызов функции PyGame, нажатие кнопки PyGame с ориентацией на объект

    В WPF можно фильтровать CollectionViewSource без кода?

    Как удалить дубликаты в таблице MySQL?

    Как объединить два списка в один длинный список?

    Как отобразить изображение base64 в UIImageView?

    Как использовать несвободные драйверы во время установки debian

    Улучшена ли дефрагментация, связанная с улучшением производительности диска?

    загрузить изображение из iphone в папку сервера

    Bundler :: GemNotFound: не удалось найти rake-10.3.2 в любом из источников

    ASP.MVC: repository, который отражает IQueryable, но не Linq to SQL, DDD. Как поставить вопрос

    Давайте будем гением компьютера.