zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    synchronized 关键字
    synchronized 关键字
    Linux IPC之共享内存
    链表的插入、删除
    链式队列的实现
    链栈的实现
    双色、三色排序问题
    memmove、memcpy、strcpy、memset的实现
    字符串中去掉多余的空格
    华为机试:从一个数组中选取不同的数(均小于10)组成一个最大的三位数
  • 原文地址:https://www.cnblogs.com/bluejump/p/4262478.html
Copyright © 2011-2022 走看看