从事Android以来的相关总结4-BroadcastReceiver广播接收者

BroadcastReceiver广播接收者

系统的一些事件,比如来电,来短信,等等,会发广播;可监听这些广播,并进行一些处理;

Android3.2以后,为了安全起见,对于刚安装的应用,需要通过点击进入应用(界面,用户确认之后),接收者才能起作用;

以后即使没有启动其界面,也能接收到广播;

1、定义广播接收者

1)定义类继承BroadcastReceiver,重写onReceive方法

2)清单文件中声明,需要在其中配置指定接收广播的类型;

3)当接收到匹配广播之后就会执行onReceive方法;

4)有序广播中,如果要控制多个接收者之间的顺序,可在配置priority属性,系统默认为0,值越大,优先级越高;

5)BroadcastReceiver除了在清单文件中声明,也可以在代码中声明,使用registerReceiver方法注册Receiver;


2、广播的分类

1)普通广播:

普通广播不可中断,不能互相传递数据;

2)有序广播:

广播可中断,通过调用abortBroadcast()方法;

接收者之间可以传递数据;

3、广播接收者的注册方式

4大组件中,只有广播接收者是一个非常特殊的组件,其他3大组件都需要在清单文件中注册;

广播接收者,有2中注册方式:清单文件与代码方式,区别:

1)清单文件注册广播接收者,只要应用程序被部署到手机上,就立刻生效,不管进程是否处于运行状态;

2)代码方式,如果代码运行了,广播接收者才生效,如果代码运行结束,广播接收者,就失效;

这属于动态注册广播,临时用一下,用的时候,register,不用时unregister;

代码方式示例:


从事Android以来的相关总结4-BroadcastReceiver广播接收者_第1张图片

4、发送广播

1)发送普通广播

①、使用sendBroadcast()方法可发送普通广播;

②、通过Intent确定广播类型,可携带数据,所有接收者都可以接收到数据,数据不能被修改,不会中断;

接收者无序(试验测试,是按照安装顺序来接收的);

③、广播时,可设置接收者权限,仅当接收者含有权限才能接收;

④、接收者的也可设置发送方权限,只接受含有相应权限应用的广播;

发送者:

Intent intent = newIntent("com.itheima.broadcast.TEST");//指定动作;接收者,需要配置intent filter才能接受到此广播

intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);//包含未启动的过的应用(也可以收到广播),默认为不包含

intent.putExtra("data", "这是来着广播发送者发来的贺电");//广播发送者intent中的数据,接收者,修改不了

sendBroadcast(intent, null);//发送无序广播,异步获取数据,不可中断,接收者之间不可传数据

接收者:

public class AReceiver extendsBroadcastReceiver {

publicvoid onReceive(Context context, Intent intent) {

System.out.println("AReceiver:" +intent.getStringExtra("data"));

}

}

注意:

如果要在广播接收者中打开Activity,需要设置一下Intent.FLAG_ACTIVITY_NEW_TASK因为广播接收者是没有Activity任务栈的

所以需要加上这个标记,方能在广播接收者中打开Activity,如:


从事Android以来的相关总结4-BroadcastReceiver广播接收者_第2张图片

2)发送有序广播

a.sendOrderedBroadcast()发送有序广播;

b.通过Intent确定广播类型,携带数据,Intent的数据同样修改无效;

c.跟普通广播一样,也可以设置相应的权限;

d.接收者可在定义android:priority定义优先级,数字越大,优先级越高;

e.有序广播会被接收者逐个接收,中途可以中断,或添加、修改数据;

f.可以指定一个自己的广播接收者,这个接收者将最后一个收到广播、不会被中断、不需要任何权限、不需要配置;

g.可以指定一个Handler用来在自己的接收者中进行线程通信;

发送者:


从事Android以来的相关总结4-BroadcastReceiver广播接收者_第3张图片

接收者AReceive


从事Android以来的相关总结4-BroadcastReceiver广播接收者_第4张图片

接收者BReceive:代码及配置与上类似,只是优先级比A的低

5、广播的生命周期

a.广播接收者的生命周期非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁;

b.广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框;

c.最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉;

d.耗时的较长的工作最好放在服务中完成;

你可能感兴趣的:(从事Android以来的相关总结4-BroadcastReceiver广播接收者)