从现实生活中理解广播机制

一听到广播我们第一感觉就会联想到小时候村里面的广播,每逢村里有什么活动都是通过广播发送的。收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同。接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理。好比我们收听交通电台的广播,电台中告诉我们现在在交通状况如何,但它并不关心我们接收到广播时做如何做出处理,这不是广播应该关心的问题,OK,到这里我们从生活中的一些小例子浅浅的理解了一下广播,那么Android 中的广播是如何操作的呢?

Android 的广播机制

在 Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,应用程序开发者也可以监听这些广播并做出程序逻辑的处理。下面我画一张粗略的图来帮助大家理解广播的运行机制。

Android 中有各式各样的广播,各种广播在Android 系统中运行,当系统/应用程序运行时便会向 Android 注册各种广播,Android 接收到广播会便会判断哪种广播需要哪种事件,然后向不同需要事件的应用程序注册事件,不同的广播可能处理不同的事件也可能处理相同的广播事件,这时就需要Android 系统为我们做筛选。

案例分析:

一个经典的电话黑名单,首先通过将黑名单号码保存在数据库里面,当来电时,我们接收到来电广播并将黑名单号码与数据库中的某个数据做匹配,如果匹配的话则做出相应的处理,比如挂掉电话、比如静音等等。。。

Demo 分析:

下面通过一个小DEMO 来讲解一下广播在Android 中如何编写,在Demo中我们设置了一个按钮为按钮设置点击监听通过点击发送广播,在后台中接收到广播并打印LOG信息。代码如下:

BroadCastActivity 页面代码

public class BroadCastActivity extends Activity {
    public static final String ACTION_INTENT_TEST = "com.terry.broadcast.test";

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn = (Button) findViewById(R.id.Button01);
        btn.setOnClickListener(new OnClickListener() {

@Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(ACTION_INTENT_TEST);
                sendBroadcast(intent);
            }
        });
    }
}

接收器代码如下:

myBroadCast 接收器

public class myBroadCast extends BroadcastReceiver {

public myBroadCast() {
        Log.v("BROADCAST_TAG", "myBroadCast");
    }

@Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Log.v("BROADCAST_TAG", "onReceive");
    }

}

Android 广播的生命周期

在上面的接收器中,继承了BroadcastReceiver 并重写了它的onReceive 并构造了一个函数,下面通过图片来一步一步认识 Android 广播的生命周期。当我点击一下按钮,它向Android 发送了一个广播,如下图:

这时我们再点击一下按钮,它还是会再向 Android 系统发送广播,此时日志信息如下:

下面本人画一张图像,描述了Android 中广播的生命周期,其次它并不像Activity 一样复杂,运行原理很简单如下图:

下面来看一下SDK给出的解释:

大意为:如果一个广播处理完onReceive 那么系统将认定此对象将不再是一个活动的对象,也就会finished掉它。

至此,大家应该能明白 Android 的广播生命周期的原理,代码也不用多介绍,很简单的一个发送广播并处理广播的Demo。

Android 如何判断并筛选广播?

前面说过 Android 的广播有各式各样,那么Android 系统是如何帮我们处理我们需要哪种广播并为我们提供相应的广播服务呢?这里有一点需要大家注意,每实现一个广播接收类必须在我们应用程序中的 manifest 中显式的注明哪一个类需要广播,并为其设置过滤器,如下图:

Tip:action 代表一个要执行的动作,在Andriod 中有很action 比如 ACTION_VIEW,ACTION_EDIT


 
那么有些人会问了,如果我在一个广播接收器中要处理多个动作呢?那要如何去处理?
在Android 的接收器中onReceive 以经为我们想到的,同样的你必须在Intent-filter 里面注册该动作,可以是系统的广播动作也可以是自己需要的广播,之后你之需要在onReceive 方法中,通过intent.getAction()判断传进来的动作即可做出不同的处理,不同的动作。具体大家可以去尝试测试一下。

 

小结:

  • 在Android 中如果要发送一个广播必须使用sendBroadCast 向系统发送对其感兴趣的广播接收器中。
  • 使用广播必须要有一个intent 对象必设置其action动作对象
  • 使用广播必须在配置文件中显式的指明该广播对象
  • 每次接收广播都会重新生成一个接收广播的对象
  • 在BroadCast 中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity 或者 Service 去处理

转载于:https://blog.51cto.com/terryblog/376621

图解 Android 广播机制相关推荐

  1. 图解 Android 广播机制-(by terry_龙)

    从现实生活中理解广播机制 一听到广播我们第一感觉就会联想到小时候村里面的广播,每逢村里有什么活动都是通过广播发送的.收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同. ...

  2. Android广播机制:Broadcast

    转载:Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广 ...

  3. android 广播观察者,作业三——观察者模式在Android广播机制上的应用

    观察者模式在Android广播机制上的应用 点击跳转项目git地址:https://github.com/Arfer-ustc/practice-Android.git 一.观察者模式在Android ...

  4. Android怎么保证广播安全,Android 广播机制安全性研究.PDF

    Android 广播机制安全性研究 电信 科 学 2016 年第 10 期 专题 :基 于 Android 系统 的终端安全 Android 广播机制安全性研究 卿 斯汉 1, 2, 3 (1. 中国 ...

  5. Android 广播机制详解

    一.广播的简介 首先,当我们一听到广播这个词时.就可以想到小学是教室的广播.不错Android中的广播机制与我们生活中的广播是有异曲同工之妙的.Android中的发送广播也就像广播室播广播,可以让很多 ...

  6. android+广播+讲解,Android广播机制

    主要内容: (1)广播机制介绍 (2)BroadcastReceiver实现 (3)BroadcastReceiver操作 (4)BroadcastReceiver生命周期 (5)注册Broadcas ...

  7. Android详细教程(基础篇):二十八、Android 广播机制BroadcastReceiver

    广播机制(BroadcastReceiver) 11.1. BroadcastReceiver简介 在实际应用中,我们常需要等,等待系统抑或其他应用发出一道指令,为自己的应用擦亮明灯指明方向.而这种等 ...

  8. android广播机制初步学习——短信黑名单

    andriod广播机制中主要使用到的两个类:Broadcast和BroadcastReceiver.即一个发送一个接受. 发送的时候是用Intent来携带数据(广播)的,利用Intent中的标识来匹配 ...

  9. Android - 广播机制和Service

    花了几天,想实现定位功能,使用的是百度的服务,有时真的很无奈,就是一小小个问题,就能折腾好几天. 首先,我是在主线程(Fragment)中单独进行定位,发现不起作用. 然后我想使用Service和广播 ...

最新文章

  1. Community Server :: Forums
  2. 软件测试工程师们,今年的年终奖你想拿多少?
  3. DHL全球货运与第四范式达成合作
  4. 基于VC的OPC客户端软件研究与实现
  5. 加州大学惊现神操作!物理教授用数学论文摆脱400美元交通罚单,却惨被网友大反转.........
  6. redis 计数 java_redission计数器实现,redisTemplate计数器
  7. Pure Pursuit纯跟踪算法Python/Matlab算法实现
  8. 给tomcat 配置https
  9. 具体数学第二版第四章习题(4)
  10. DELPHI XE5-8 弹出列表框供选择
  11. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_6_练习_序列化集合...
  12. linux恢复树莓派内存卡容量,找回树莓派SD卡剩余空间
  13. 使用 Proteus 仿真单片机
  14. Studio3T安装
  15. 世界各国网络域名后缀
  16. python样本期望值_机器学习中的概率论与梳理统计(Python实现数学期望、方差等)...
  17. 思念绵绵,爱在彼此心间漫延
  18. dbcp 出现的connection is closed的问题
  19. 苹果ipad如何横向_苹果iPad的阵容是一个完整的混乱
  20. 双系统window更新后,开机引导错误,grub rescue修复

热门文章

  1. 蓝绿部署、滚动部署、灰度发布、金丝雀发布-概念介绍---应用部署001
  2. Vue计算属性之基本使用---vue工作笔记0004
  3. security工作笔记009---spring security BCryptPasswordEncoder加密解密,不错的随机盐,不错的加密解密方法
  4. 资源配置文件的目录结构以及相应的读取方式
  5. memset函数详细说明 1
  6. 随想录(无均衡负载的smp os设计)
  7. 嵌入式操作系统内核原理和开发(固定内存分配算法)
  8. ajax的typeAMDAt,ajax的运用
  9. weblogic 文件打开数_Weblogic任意文件读取和任意文件上传
  10. rsa加密算法实现_深度理解:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256