【问题标题】:Necessity to unregister Broadcast Receiver which is not declared in manifest必须注销未在清单中声明的​​广播接收器
【发布时间】:2015-08-17 10:51:59
【问题描述】:

如果我的 Android Studio 项目的清单文件中未提及“广播接收器”,是否需要取消注册?有什么后果?

【问题讨论】:

    标签: android broadcastreceiver broadcast android-broadcast


    【解决方案1】:

    this

    如果从 Activity 上下文中使用,则正在注册接收器 在该活动中。这意味着您应该取消注册 在活动完成之前被销毁;事实上,如果你不这样做 因此,框架将在删除时清理您泄露的注册 活动并记录错误。因此,如果您使用 Activity 上下文 注册一个静态的接收者(对于进程来说是全局的,而不是 与 Activity 实例相关联),那么该注册将是 在您使用的活动被破坏的任何时候都将其移除。

    因此,如果您将 BroadcaseReceiver 与 Activity 关联,则无需取消注册。

    【讨论】:

    • 但是,我认为最好在销毁活动之前以编程方式注销它,尽管根据您的解释,BroadcastReciever 在销毁上下文活动时未注册:)
    • 是的,这样做通常会更好。我们只是不必
    【解决方案2】:

    如果您的BroadcastReceiver 是在onCreate() 方法中启动的,则必须取消注册,这样当您的活动再次启动时,它不会再创建另一个,从而导致多个BroadcastReceivers

    【讨论】:

    • 但是,如果我在'onCreate()'中注册它,那么我认为只有重新启动应用程序才能再次调用'onCreate()'函数......所以在那种情况下不会是多个“BroadcastReceivers”,因为前一个将在活动销毁时自动取消注册......如果活动没有被销毁,返回活动将调用“onRestart()”->' onStart()'->'onResume()' 不是 'onCreate()'…………我的理解有什么问题吗?
    • 不,除非您在代码中提及,否则不会在onDestroy() 上销毁前一个。
    • 活动试图清理,但经常发生的是它会产生错误。它可能发生。为了获得最佳效果,请取消注册。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多