Утечка локально управляемого широковещательного приемника?

Возможно ли, что локальный (то есть управляемый с помощью LocalBroadcastManager) BroadcastReceiver дает утечку, когда приложение уничтожается системой?

Конкретный вариант использования, для которого мне это нужно, заключается в том, что я хотел бы зарегистрировать/отменить регистрацию BroadcastReceiver в onCreate/onDestroy действия (мне нужно, чтобы приемник был активен, когда действие не видно), но я не хотел бы рисковать вызывая утечку памяти, делая это. Насколько я понимаю, если одно действие уничтожается системой, запускается onDestroy и получатель не регистрируется. Что делать, если приложение убито? Приемник остается или, будучи локальным, его убивают вместе с приложением?


person pstobiecki    schedule 27.06.2013    source источник


Ответы (2)


Если вы заглянете внутрь LocalBroadcastManager исходный код, вы увидите, что это просто обычный класс ("локальный", как вы сказали) с Map, соединяющим различные BroadcastReceiver с соответствующими List из IntentFilter.

На «системном уровне» ничего не зарегистрировано, поэтому НЕТ: если приложение будет уничтожено, класс LocalBroadcastManager будет уничтожен вместе с ним, и утечки не произойдет.

person Takhion    schedule 29.09.2013

Вы должны полностью отменить его регистрацию в onDestroy, потому что onDestroy не означает, что ваше приложение завершено, а только ваша активность. Другие действия в вашем приложении все еще могут быть запущены, поэтому получатель вызовет утечку.

person Gabe Sechan    schedule 27.06.2013
comment
Спасибо за ваш ответ. Однако то, что я имел в виду под вопросом, было другим случаем. Отмена регистрации в OnDestroy может не произойти, когда система убивает приложение, потому что метод не будет вызываться. Не вытечет ли ресивер в таком случае? - person pstobiecki; 27.06.2013