0

андроида страницы разработчика для Broadcasts сказать о радиовещательных приемников и их приема передач:Действительно ли unregisterReceiver требуется для широковещательного приемника Android на базе контекста?

Контекст зарегистрированных приемников принимать широковещательные до тех пор, как их регистрирующего контексте является действительным. Например, если вы зарегистрировали в контексте контекст активности, вы получаете широковещательные передачи, пока активность не не уничтожена.

Он также говорит, что это:

Помните о том, где вы регистрации и отмены регистрации ресивера для Например, если зарегистрировать приемник в OnCreate (Bundle), используя контекст активность, вы должны отмените регистрацию в onDestroy(), чтобы предотвратить утечки приемника из контекста активности.

Для меня это означает, что если вы зарегистрировать приемник в контексте деятельности, но не отменить ее, когда эта деятельность будет уничтожен, вы не будете больше получать широковещательные, но вы все равно будет «течь» приемник. Это правильно?

Причина, почему я хочу знать, это именно то, что я хочу, чтобы обернуть основе контекста на широковещательный приемник в объекте, и я хотел бы интерфейс к этому объекту, чтобы быть похожим на это:

class DoesManyThings { 
    DoesManyThings(Context context) { 
     context.registerReceiver(...); 
    } 
} 

Я создам этот объект в методе onCreate. Но если я это сделаю, я не буду знать, когда нужно отменить регистрацию получателя, и мне придется добавить явный метод, например void cleanup(), который я должен позвонить по номеру onDestroy. Я хотел бы знать, должен ли я делать эту явную очистку.

ответ

0

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

С точки зрения чистоты кода, похоже, что вы должны также иметь метод очистки. В будущем вы можете расширить то, что делает объект «DoesManyThings», а другое добавленное вами состояние может быть менее безопасным для хранения вне жизненного цикла Activity.

Обратите внимание, что onDestroy не может быть вызван. Возможно, вы захотите рассмотреть возможность перехода на onStart/onStop, но это зависит от вашего конкретного варианта использования динамического приемника.

0

Вы можете зарегистрировать компонент для жизненного цикла обратного вызова по телефону

activity.getApplication().registerActivityLifecycleCallbacks() 

Затем прослушивайте onDestroy() дозвона Activity и разрегистрировать приемник там.

Это немного перебор, но служит цели.

Смежные вопросы