广播(Broadcast)是组件之间传递数据的一种机制,也是一种方式。
是一种异步的方式来进行传播的,广播发出去之后,所有的广播接收者几乎是同一时间收到消息的。他们之间没有先后顺序可言,而且这种广播是没法被截断的。
有序广播是一种同步执行的广播,在广播发出去之后,同一时刻只有一个广播接收器可以收到消息。当广播中的逻辑执行完成后,广播才会继续传播。并且前面的广播接收器还可以截断(abortBroadcast())正在传递的广播,这样后面的广播接收器就无法收到广播消息了。
顾名思义,就是在代码中注册的。
静态注册广播动态注册要求程序必须在运行时才能进行,有一定的局限性,如果我们需要在程序还没启动的时候就可以接收到注册的广播,就需要静态注册了。主要是在AndroidManifest中进行注册。
Android系统中内置了多个系统广播,每个系统广播都具有特定的intent-filter,其中主要包括具体的action,系统广播发出后,将被相应的BroadcastReceiver接收。系统广播在系统内部当特定事件发生时,由系统自动发出。
自定义广播由应用程序开发者自己定义的广播
全局广播可以被其它任何应用程序接收到,并且我们也可以接受来自于其它任何应用程序的广播。
本地广播本地广播广播只能在应用程序内部进行传递,并且广播接受器也只能接受来自本应用程序发出的广播,这样更安全,更高效。
Context: The Context in which the receiver is running. Intent: The Intent being received.
说明BroadcastReceiver本身不是Context,其内部也不含有Context,但在onReceive(Context context, Intent intent)中有context参数。这个context随着receiver的注册方式的不同而不同: 静态注册:context为ReceiverRestrictedContext 动态注册:context为Activity的context LocalBroadcastManager的动态注册:context为Application的context
超过10s 出现ANR 注意:不要在 onReceive()方法中添加过多的逻辑或者进行任何的耗时操作,因为在广播接收器中是不允许开启线程的,当onReceive()方法运行了较长时间而没有结束时,程序就会报错。因此广播接收器更多的是扮演一种打开程序其它组件的角色,比如创建一条状态栏通知,或者启动一个服务等。
待定
参考链接: https://www.jianshu.com/p/53e6abd8bfc7 https://www.jianshu.com/p/92ccb8ca2ea5