android - BroadcastReceiver 的 Manifest 和 Programmatic 注册的主要区别

标签 android broadcastreceiver android-lifecycle

我试图了解在 Manifest 中注册 BroadcastReceiver 和以编程方式注册之间的主要区别...

我的理解基本上如下(如果我遗漏了什么,将不胜感激有人纠正我的观点)。

  • 在 Manifest 中注册:

    1. 如果需要,操作系统会神奇地找到并实例化您的类,调用 onReceive() 方法,而不管您的应用程序的运行状态是什么
    2. 您的 receive 每次广播只会被调用一次(即,您可以认为在 list 中注册就像注册您的“类”以接收广播 - 并且广播会根据需要实例化您的类)(??)
  • 以编程方式注册:

    1. 在代码中注册意味着您正在注册类的实例以接收广播消息(即,如果您的代码有点草率,并且您设法注册了多次,那么您最终会得到多个 BroadcastReceiver 实例,它们都具有它们的 onReceive( ) 要求广播
    2. 要注销,您需要注销您之前注册的特定 BroadcastReceiver 实例
    3. 如果您的应用程序被操作系统破坏,您的 onReceive() 方法将不会被调用以进行广播

谢谢

最佳答案

你说的基本正确。

请注意, list 注册的接收器对象仅使用一次。您的 BroadcastReceiver 的新实例为每个广播创建。 list 注册接收器的主要用途是当您的代码不在内存中时可能会继续广播(例如,BOOT_COMPLETED,您通过 AlarmManager 安排的警报)。

关于android - BroadcastReceiver 的 Manifest 和 Programmatic 注册的主要区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651772/

相关文章:

android - TextView 无意中缩进了第一行

java - 如果 strings.xml 中存在未转义的撇号,如何使构建失败?

android - 在 BroadcastReceiver 中启动一个新线程是否安全?

java - 如何在BroadcastReceiver和main方法之间传递信息

android - 从后台返回视频时出现空白屏幕

安卓生命周期 : Is onResume() supposed to be called during startup?

android - ListView 捕捉到项目

Android 'Back' 按钮 Action

java - TimerTask 和广播接收器 onReceive

Android Activity fragment 较多,生命周期变化的正确处理方式?