静态广播接收者、动态广播接收者对比
知识点提取出的demo:
用两种方式实现如下需求(使用动态和静态注册广播):编写一个程序,要求在activity中点击一个button,发送一个广播(该广播的intent中携带一个字符串数据),自定义一个广播接受者,接收到这个广播之后toast显示activity发送过来的内容。
相关知识点:
广播接收器可以自由地对自己感兴趣的广播进行注册,这样当有相应的广播发出(demo中button按钮)时,广播接收器就能够收到该广播(demo中的接收广播),并在内部处理相应的逻辑(toast显示activity发送过来的内容).注册广播的方法一般有如下两种:
静态注册:在AndroidManifest.xml中注册广播。AndroidManifest中声明<receiver>,需要在其中配置<intentfilter>指定接收广播的动作(action)。主要用于一般性的广播。
动态注册:在Java代码中注册。一般用于发送频次高的广播,比如接收手机每时每刻的电量、屏幕的开启与关闭。
两种注册的区别:代码注册,它不是常驻型广播,也就是说广播跟随程序的生命周期,一旦代码所在进程被杀死,广播接收者就失效。清单文件注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。一旦应用程序被部署到手机,广播接收者就会生效,高版本的模拟器(3.2以上)中的接收者,需要启动过一次才能接收到广播。
动态注册的广播接收器可以自由地控制注册与注销,在灵活方面有很大的优势,但是也存在一个明显的缺点:必须程序开启后才能接收到广播,因为注册的逻辑实在onCreate方法中写的.比如我们需要让程序接收一条开机的广播,就需要使用静态注册了.
demo代码实现(文后有源码链接):
(1) 注册动态广播: