4

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

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

ответ

4

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

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

0

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

+0

Благодарим вас за ответ. Однако то, что я имел в виду под вопросом, было другим. Незарегистрировать в OnDestroy может не случиться, когда система убивает приложение, потому что метод не будет вызван. В этом случае приемник собирается «вытечь»? – pstobiecki