简体   繁体   English

在Android上取消注册BroadcastReceiver

[英]Unregister BroadcastReceiver on Android

I think I'm not seeing the bigger picture here, or have miss understood how BroadcastReceiver works. 我想我在这里看不到更大的图景,或者错过了了解BroadcastReceiver工作原理。

Let's imagine a dummy app that every time that the user receives a call, the app register the caller number at a file at the SD card. 假设有一个虚拟应用程序,该应用程序每次用户收到呼叫时,都会在SD卡上的文件中注册呼叫者号码。 To do that, I'd simply create a BroadcastReceiver that starts a Service every time the user receives a call. 为此,我只需创建一个BroadcastReceiver即可在用户每次收到呼叫时启动Service

Now, If I want that app to works, I understand I can't call unregisterReceiver() at the onPause() method. 现在,如果我希望该应用程序正常运行,我知道我无法在onPause()方法上调用unregisterReceiver() But in the other hand, If I run the app sometimes I get an exception: 但另一方面,如果我运行该应用程序,有时会出现异常:

Activity has leaked IntentReceiver that was originally registered here. 活动泄漏了最初在此处注册的IntentReceiver。 Are you missing a call to unregisterReceiver()? 您是否缺少对unregisterReceiver()的调用?

So, what I'm missing here? 那么,我在这里想念的是什么? How can my dummy app receive callback at every call if I have to call unregisterReceiver() ? 如果必须调用unregisterReceiver()我的虚拟应用程序如何在每次调用时接收回调?

Thank you, 谢谢,

How can my dummy app receive callback at every call if I have to call unregisterReceiver()? 如果必须调用unregisterReceiver(),我的虚拟应用程序如何在每次调用时接收回调?

There are two ways to set up a BroadcastReceiver : 设置BroadcastReceiver有两种方法:

  • registerReceiver() , which is only useful for a process that will be running for other reasons registerReceiver() ,仅对由于其他原因而正在运行的进程有用

  • <receiver> in the manifest 清单中的<receiver>

Your situation sounds like a case for using <receiver> . 您的情况听起来像是使用<receiver>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM