我试图了解在 Manifest 中注册 BroadcastReceiver 和以编程方式注册之间的主要区别...
我的理解基本上如下(如果我遗漏了什么,将不胜感激有人纠正我的观点)。
在 Manifest 中注册:
- 如果需要,操作系统会神奇地找到并实例化您的类,调用 onReceive() 方法,而不管您的应用程序的运行状态是什么
- 您的 receive 每次广播只会被调用一次(即,您可以认为在 list 中注册就像注册您的“类”以接收广播 - 并且广播会根据需要实例化您的类)(??)
以编程方式注册:
- 在代码中注册意味着您正在注册类的实例以接收广播消息(即,如果您的代码有点草率,并且您设法注册了多次,那么您最终会得到多个 BroadcastReceiver 实例,它们都具有它们的 onReceive( ) 要求广播
- 要注销,您需要注销您之前注册的特定 BroadcastReceiver 实例
- 如果您的应用程序被操作系统破坏,您的 onReceive() 方法将不会被调用以进行广播
谢谢
最佳答案
你说的基本正确。
请注意, list 注册的接收器对象仅使用一次。您的 BroadcastReceiver
的新实例为每个广播创建。 list 注册接收器的主要用途是当您的代码不在内存中时可能会继续广播(例如,BOOT_COMPLETED
,您通过 AlarmManager
安排的警报)。
关于android - BroadcastReceiver 的 Manifest 和 Programmatic 注册的主要区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651772/