BroadcastReceiver

BroadcastReceiver

BroadcastReceiver也是Android四大组件之一。顾名思义,是接收消息的组件。比如Android系统的一些事件,wifi状态,亮屏灭屏,开机等等,好多事件都会发出广播。比如wifi状态变化,当我们的app收到消息时,可以及时提醒用户从wifi切换到了手机流量。当然了,我们也可以在自己的app中发消息,并使用BroadcastReceiver来接收。由于发送者和接收者是相互独立的,所以可以做到夸线程,甚至夸进程收发。虽然可以有效的减少我们在夸进行线程间的麻烦,但是会使得机构十分松散,不容易维护。所以还是慎用。

1.收发

1.1发

context.sendBroadcast(intent);

这样就可以发送一个最简单的广播,需要构造intent,设置action等参数(是否设置其他参数根据需求)

1.2收

定义一个类,继承BroadcastReceiver,实现onReceive方法,方法中会传过来intent,这里我们可以对想关注的action进行过滤。注意,onReceive方法是在主线程,不能执行耗时操作

最简单的收发就是这么简单,当然,如果有需求的话,还可以发送有序广播,也就是说广播的接收是有顺序的,并且可以在每一个顺序节点上对intent携带的内容进行修改。

2.注册

BroadcastReceiver也是Android的四大组件之一,所以也需要配置在AndroidManifest.xml中(静态注册)。

但是比较特殊的事,BroadcastReceiver也可使用代码配置(动态注册)

二者的区别是:静态注册,无论app是否在运行,只要有满足了onReceive条件的广播,就会启动组件。动态注册,只在注册的有效期内会响应onReceive。

上面提到了有效期,注意,动态注册的方式,一定要及时解注册,否则可能造成内存泄漏

3.安全

安全问题也从两个角度出发,一个收,一个发

3.1发

如果你的广播只是在本app中使用,不希望被其他app收到,可以考虑使用sendLocalBroadcast

如果你的广播需要发送到其他app,可以给intent设置package,这样就会指定目标应用。为了进一步安全,你还可以设置权限,只有设置了响应权限的应用才能接受

3.2收

如果你的广播接收者只需要响应本app的广播,可以设置exported属性,表示不响应外部广播。

如果你的广播接收者需要响应其他app的广播,可以使用上面提到的,配置权限

你可能感兴趣的:(Android,技术)