• Android常用组件Broadcast介绍


    一、Broadcast简介

    Broadcast是Android的四大组件之一。可分为:

    1、普通广播  发送一个广播,所有监听该广播的广播接收者都可以监听到改广播。 

    2、异步广播  当处理完之后的Intent,依然存在,这时候registerReceiver(BroadcastReceiver,IntentFilter) 还能收到他的值,直到你把它去掉,不能将处理结果传给下一个接收者,无法终止广播。

    3、有序广播  按照接收者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000到1000之间,值越大,优先级越高.可以终止广播意图的继续传播.接收者可以篡改内容. 

    二、广播Broadcast实现过程

    1、注册

    a、配置文件注册

    1 <!-- 注册自定义静态广播接收器 -->  
    2 <receiver android:name="com.example.androidtest.broadcast.MyReceiver">
    3   <intent-filter >
    4      <action android:name="MyAction"/>
    5    </intent-filter>
    6</receiver>

    b、代码注册

    1 MyReceiver myReceiver = new MyReceiver();
    2 IntentFilter filter = new IntentFilter();
    3 filter.addAction("MyAction");
    4 registerReceiver(myReceiver,filter);

    2、发送广播

    1 Intent intent = new Intent();
    2 intent.setAction("MyAction");
    3 intent.putExtra("msg", "这是广播发送的消息");
    4 sendBroadcast(intent);

    3、接收类的实现

    继承BroadcastReceiver并重写onReceive方法。

    1 public class MyReceiver extends BroadcastReceiver
    2 {
    3     public void onReceive(Context context, Intent intent)
    4     {
    5         Toast.makeText(context, "广播消息是:" + intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
    6     }
    7 
    8 }

    三、若内部类作为广播接收类如何实现

    1、注册

    a、配置文件注册

    1 <!-- 注册自定义静态广播接收器 -->  
    2 <receiver android:name="com.example.androidtest.broadcast.BroadcastTest$MyReceiver">  <!-- 注意内部类写法:普通类$内部类 -->
    3   <intent-filter >
    4      <action android:name="MyAction"/>
    5    </intent-filter>
    6</receiver>

    b、代码注册

    1 MyReceiver myReceiver = new MyReceiver();
    2 IntentFilter filter = new IntentFilter();
    3 filter.addAction("MyAction");
    4 registerReceiver(myReceiver,filter);

    2、发送广播

    1 Intent intent = new Intent();
    2 intent.setAction("MyAction");
    3 intent.putExtra("msg", "这是广播发送的消息");
    4 sendBroadcast(intent);

    3、接收类的实现

    注意:若在配置文件中注册则该类必须声明为static,否则找不到,若在代码中注册可省略static修饰

    1 public static class MyReceiver extends BroadcastReceiver 
    2 {
    3     public void onReceive(Context context, Intent intent)
    4     {
    5         Toast.makeText(context, "广播消息是:" + intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
    6     }
    7 
    8 }

    四、用途

    开机、锁屏、电量低…… 

    五、注意

    生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报错 。

    每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应 . 所以在BroadcastReceiver 里不能做一些比较耗时的操作 , 否侧会弹出 ANR(Application NoResponse) 的对话框 

    部分内容取自:http://yangguangfu.iteye.com/blog/1063732

  • 相关阅读:
    搭建一键化编译汇编语言的环境
    Windows内核中的CPU架构8任务段TSS(task state segment)
    80866中断
    x86132位x86 处理器编程架构
    80861计算机的启动过程
    Android 10升级至Android 11后关于startActivity启动应用抛异常处理方法
    通过AndroidJUnit4框架发现用例不会按顺序执行,变成随机了
    2021年11个我们喜爱的DevOps开源工具
    2021年终总结
    CF1204C Anna, Svyatoslav and Maps
  • 原文地址:https://www.cnblogs.com/bluejump/p/4262478.html
Copyright © 2020-2023  润新知