Android静态注册广播和动态注册广播的区别

1. 前言


Android中的广播主要可以分为两种类型:标准广播和有序广播。

  • 标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播信息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。
  • 有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法接收到广播信息了。

而要接收广播,就要注册广播接收器(Broadcast Receiver),由它来帮帮忙。其注册的方式分为两种:静态注册和动态注册。接下来就来说一说这两种注册方式的区别。


2. 区别


2.1 动态注册是在Java类中注册,而静态注册是在AndroidManifest.xml中注册。


2.2 动态注册的广播接收器不是常驻型的,会随着所注册的Activity的结束而结束,如果所在的Activity已经destroy了,那么该广播接收器也就不能再继续接收广播了。注意:在Activity结束前,要取消注册广播接收器,不然会导致内存泄露;静态注册的广播接收器是常驻型的,即使所在的APP被关闭了,也是可以接收到广播的。


2.3 当广播为标准广播时:

  • 无视优先级,动态注册的优先于静态注册的
  • 同优先级的同类广播接收器,动态注册:先注册的优先于后注册的;静态注册:先扫描的优先于后扫描的


2.4 当广播为有序广播时:

  • 优先级高的先接收
  • 同优先级的广播接收器,动态注册的优先于静态注册的
  • 同优先级的同类广播接收器,动态注册:先注册的优先于后注册的;静态注册:先扫描的优先于后扫描的


发布了43 篇原创文章 · 获赞 34 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Fantasy_Lin_/article/details/78625954
今日推荐