Почему LocalBroadcastManager.getInstance(Контекстный контекст) требует контекста в качестве параметра?

Если я могу зарегистрировать приемник следующим образом:

LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("myStringFilter"));

и отправьте широковещательную рассылку следующим образом:

Intent intent = new Intent("myStringFilter");
LocalBroadcastManager.getInstance(new Activity()).sendBroadcast(intent);

зачем вообще требовать Context для getInstance? Если я могу просто сказать new Activity(), и это все еще работает, в чем смысл?


person Adam Johns    schedule 12.03.2014    source источник


Ответы (1)


Прямо сейчас LocalBroadcastManager использует предоставленный Context для вызова getApplicationContext() на нем. Хотя new Activity() может работать в настоящее время везде, где вы его тестировали, я бы не стал полагаться на то, что это поведение обязательно будет работать на всех прошлых/настоящих/будущих версиях Android.

LocalBroadcastManager нужен Context, чтобы работать с Handler и Looper для основного потока приложения, и для этого он использует Application (а не какой-то другой Context), чтобы предотвратить утечку памяти.

Вы можете изучить исходный код LocalBroadcastManager, чтобы узнать больше о его внутренней работе.

person CommonsWare    schedule 12.03.2014