我是否总是必须注销广播接收器(如果是,如何注销)?
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
本身,但是 unregister
和 broadcastreceiver
本身中的 broadcastreceiver
似乎很奇怪。
如果不是: 为什么我不必 unregister
呢?
如您所见,我在这里有点迷路....
通常你应该在onStart 注册你的Receiver,在onStop 或onCreate 和onDestroy 取消注册。您应该始终取消注册您的接收器,特别是如果您只希望它被触发一次。看看你的 Logcat 通常它会通知你你已经泄露了一个接收器。
我不认为你的 activity 消失了,它可能已经进入了生命周期的低谷,但如果你没有注销接收器,你仍然保留在内存中,我认为你造成了内存泄漏。
我有一个小应用程序,当启动 activity
时,在 on_create
中注册一个 broadcastreceiver
然后退出(通过调用 finish()
)
(旁注:令我惊讶的是广播接收器仍然收到 ACTION_SCREEN_OFF 事件,即使我的应用程序已完成。我认为广播接收器将被取消注册。但我惊喜是愉快的,因为这是我想要的)
现在,当屏幕关闭时,broadcastreceiver
中的 onReceive
事件也会关闭,我会执行我的操作。
然后我想知道:我是否必须 unregister
broadcastreceiver
,因为我只想捕获事件一次,而当我不 unregister
时,不会'在我关闭 phone 之前,broadcastreceiver
是否正在接收(和处理)事件?
如果是这样: 我要把 unregister
代码放在哪里。该应用程序 (activity
) 不见了,所以我想我不能把它放在那里。所以在我看来,唯一剩下的地方就是 broadcastreceiver
本身,但是 unregister
和 broadcastreceiver
本身中的 broadcastreceiver
似乎很奇怪。
如果不是: 为什么我不必 unregister
呢?
如您所见,我在这里有点迷路....
通常你应该在onStart 注册你的Receiver,在onStop 或onCreate 和onDestroy 取消注册。您应该始终取消注册您的接收器,特别是如果您只希望它被触发一次。看看你的 Logcat 通常它会通知你你已经泄露了一个接收器。
我不认为你的 activity 消失了,它可能已经进入了生命周期的低谷,但如果你没有注销接收器,你仍然保留在内存中,我认为你造成了内存泄漏。