Android中BroadcastReceiver理解

一、BroadcastReceiver是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到消息。BroadcastReceiver运行在UI线程,所以不能做比较耗时的操作,否则会发生ANR错误。应该启动Service,在Service中创建线程操作。一般不能在BroadcastReceiver中创建子线程,因为BroadcastReceiver的生命周期很短,一个BroadcastReceiver 对象只有在被调用onReceive(Context, Intent)时才有效,当从该函数返回后,该对象就无效的了,结束生命周期,子线程可能还没结束,BroadcastReceiver就先结束了。BroadcastReceiver一旦结束,此时BroadcastReceiver所在的进程很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。如果它的宿主进程被杀死,那么正在工作的子线程也会被杀死,所以在BroadcastReceiver中使用子线程是不可靠的。

二、定义BroadcastReceiver接收器 继承BroadcastReceiver类,重写onReceive方法。

三、注册BroadcastReceiver接收器

1. 静态注册

静态注册方式是在AndroidManifest.xmlapplication里面定义receiver并设置要接收的action。特点是不管应用程序是否关闭,都会进行监听。如果应用程序关闭,系统会调用监听。

              <receiver android:name="MyReceiver">

                     <intent-filter>

                            <action android:name="MyReceiver_Action"/>

                     </intent-filter>

              </receiver>

2. 动态注册

动态注册方式是在Activity中调用函数来注册,并在程序关闭时取消注册。特点是在代码中测试,在程序关闭时可以取消注册,不再进行监听。

              MyReceiver receiver = new MyReceiver();

              //创建过滤器,并指定action,使之用于接收同actionBroadcastReceiver

              IntentFilter filter = new IntentFilter("MyReceiver_Action");

              //注册BroadcastReceiver接收器

              registerReceiver(receiver, filter);

四、发送BroadcastReceiver

              // 指定BroadcastReceiver目标Action

              Intent intent = new Intent("MyReceiver_Action");

              // 可通过Intent携带消息

              intent.putExtra("msg", "发送BroadcastReceiver");

              // 发送BroadcastReceiver消息

              sendBroadcast(intent);

五、注销BroadcastReceiver

              //注销BroadcastReceiver接收器

              unregisterReceiver(receiver);


转载于:https://my.oschina.net/android520/blog/652221

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值