我是否总是必须注销广播接收器(如果是,如何注销)?

Do I always have to unregister a broadcast receiver (and if so, how)?

我有一个小应用程序,当启动 activity 时,在 on_create 中注册一个 broadcastreceiver 然后退出(通过调用 finish()

(旁注:令我惊讶的是广播接收器仍然收到 ACTION_SCREEN_OFF 事件,即使我的应用程序已完成。我认为广播接收器将被取消注册。但我惊喜是愉快的,因为这是我想要的)

现在,当屏幕关闭时,broadcastreceiver 中的 onReceive 事件也会关闭,我会执行我的操作。

然后我想知道:我是否必须 unregister broadcastreceiver ,因为我只想捕获事件一次,而当我不 unregister 时,不会'在我关闭 phone 之前,broadcastreceiver 是否正在接收(和处理)事件?

如果是这样: 我要把 unregister 代码放在哪里。该应用程序 (activity) 不见了,所以我想我不能把它放在那里。所以在我看来,唯一剩下的地方就是 broadcastreceiver 本身,但是 unregisterbroadcastreceiver 本身中的 broadcastreceiver 似乎很奇怪。

如果不是: 为什么我不必 unregister 呢?

如您所见,我在这里有点迷路....

通常你应该在onStart 注册你的Receiver,在onStop 或onCreate 和onDestroy 取消注册。您应该始终取消注册您的接收器,特别是如果您只希望它被触发一次。看看你的 Logcat 通常它会通知你你已经泄露了一个接收器。

我不认为你的 activity 消失了,它可能已经进入了生命周期的低谷,但如果你没有注销接收器,你仍然保留在内存中,我认为你造成了内存泄漏。