Android基础之五:四大组件(Broadcast Receiver)

  • Broadcast Receiver作为Android四大组件之一,在整个系统中广泛运用,系统中存在各种各样的广播机制,例如下载,网络等都有具体的广播接收器
  • 广播在很大程度上简化了开发,可以通过广播监听系统状态变化,监听另一App中事件传递,可以接收当前App中不同组件,不同UI、不同线程之间的消息传递
  • 广播的创建与使用
    • 创建一个继承自BroadcastReceiver类的子类,重写onReceiver方法
    • public class MReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
              //ToDo
          }
      }
    • 注意在onReceive中不能处理耗时操作,一般不能超过6s,超过6s就会报Exception异常,如果有耗时操作,都放到辅助线程中运行,辅助线程具体参考Android基础之多线程开发
    • Manifest中需要注册该Receiver
      • receiver节点

        • 属性:name:指定receiver类路径
        • 子节点intent-filter
          • 属性:priority:优先级,-1000~1000,优先级高的能够早接收到广播,只有sendOrderedBroadcast发送才有用
          • 子节点
            • action:标识,为隐式Intent调用准备,可以跨应用接收广播
    • <receiver android:name=".MReceiver" android:exported="true">
           <intent-filter android:priority="100">
               <action android:name="com.example.AndroidTest_01.receiver1"></action>
           </intent-filter>
      </receiver>
    • 完成注册后并不是在应用启动的时候广播接收器才启用,而是一直运行在系统中,不管应用是打开还是退出,都会启用,在接收到消息后都会执行onReceiver,尽管App已经退出了,因此这里如果需要与App进行交互,需要注意
    • 跨应用接收广播,或者接收系统广播需要设置android:exported=true;
    • 发送广播
      • 创建广播Intent

        • 显式创建Intent
        • Intent intent1=new Intent(MyActivity.this,MReceiver.class);
          sendBroadcast(intent1);
        • 隐式创建Intent
        • Intent intent1=new Intent();
          intent1.setAction("com.example.AndroidTest_01.receiver1");
          sendBroadcast(intent1);
      • 发送广播
        • 普通发送
        • sendBroadcast(intent1);
        • 有序发送
        • sendOrderedBroadcast(intent1,null);
        • 有序广播配合广播注册优先级使用,能够控制接收器接收顺序,并且在优先级高的接收器中可以停止对优先级低的接收器进行继续广播
        • @Override
          public void onReceive(Context context, Intent intent) {
              //ToDo
              abortBroadcast();
          }
        • 滞留广播发送StickyBroadcast、StickyOrderedBroadcast
          • 滞留广播具体表现为可以先发送消息,再注册接收,即先上船后补票
          • 当发送滞留广播时,系统会保留最后发送的一条滞留广播所带信息,当有符合要求的接收器注册时都会自动收到带有该信息的广播
          • StickyBroadcast与StickyOrderedBroadcast的区别同Broadcast与OrderedBroadcast一样
          • 既然能够保存在系统中,那么也就能够删除,删除方法是removeStickyBroadcast
  • 动态注册与静态注册
    • 在Manifest中注册是静态注册,在应用安装后就自动注册到系统中,这种方式长期消耗内存,适合监听系统广播以及应用生命周期中一直使用的广播
    • Android还支持一种代码中注册的方式,能够灵活实现接收器注册,适合运用在应用内部监听的消息广播
    • 动态注册方式
      • 注册
      • registerReceiver(new MReceiver(),new IntentFilter("com.example.AndroidTest_01.receiver1"));
      • 既然有动态注册那就有对应的动态取消注销
      • MReceiver receiver=new MReceiver();
        unregisterReceiver(receiver);
      • 动态注销需要通过注册时的实例来注销,因此静态注册的接收器不能动态注销,只有动态注册时保存实例引用才能注销
      • 注册与注销配合使用能够优化应用性能,减少不必要的资源消耗
  • 发送局部广播与全局广播
    • 默认的发送广播消息是全局广播,系统中所有符合要求的接收器都能够接收到广播消息
    • 局部广播
      • 通过LocalBroadcastManager来发送局部广播
      • LocalBroadcastManager localBroadcastManager=LocalBroadcastManager.getInstance(MyActivity.this);
        localBroadcastManager.sendBroadcast(new Intent("com.example.AndroidTest_01.receiver1"));
      • 通过LocalBroadcastManager发送的广播能够只在当前应用中传播,不会想其他App发送广播,保证了数据隐私性
      • 通过LocalBroadcastManager注册的接收器也不会接收到其他App发过来的消息,能够防止其他App进行攻击
      • LocalBroadcastManager比全局系统广播更加高效
      • 通常使用局部广播来在应用中进行广播事件纷发与接收,配合动态注销广播的运行能够最大化提高应用效率
时间: 2024-10-13 05:12:09

Android基础之五:四大组件(Broadcast Receiver)的相关文章

Android基础之四大组件---Activity

Android基础之四大组件-Activity 1.什么是Activity 2.Activity生命周期 3.Activity生命周期演示 4.Activity之间的通信 5.Activity之加载模式 6.Activity的栈式管理 1.什么是Activity? Activity是用户接口程序,它是Android应用程序的基本功能单元,它的主要功能是提供界面.Activity是Android的核心类,该类的全名是android.app.Activity.Activity相当于C/S程序中的窗体

Android四大组件-Broadcast Receiver

http://www.jianshu.com/p/1013a366cc72 前言 基础知识. 1.Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播可以跨进程甚至跨App直接通信. 2.你的APP可以接收广播(如当电话呼入时,或者数据网络可用时)进行接收并做出响应. 3.广播接收器没有用户界面.然而,它们可以启动一个Activity或Service服务来响应它们收到的信息,或者用NotificationMa

android基础(二)Broadcast Receiver知识

1.广播的注册 (1)动态广播注册: 优点:可以灵活控制广播的注册与撤销 缺点:必须在程序启动时才能接收广播 IntentFilter :当Intent在组建之间传递时,组件想告诉android系统自己可以响应及处理那些Intent,就要用到IntentFilter类,IntentFilter对象负责过滤掉组件无法响应和处理的Intent,只将自己关心的Intent接收进来进行处理. IntentFilter.addAction():根据action设置可以通过的intent,IntentFil

Android开发学习之路--Broadcast Receiver初体验

学习了Activity组件后,这里再学习下另一个组件Broadcast Receiver组件.这里学习下自定义的Broadcast Receiver.通过按键自己发送广播,然后自己接收广播.新建MyBroadcastReceiver,代码如下: package com.example.jared.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import andro

王立平--android中的四大组件

Android中称为四大组件的为别为:Activity/Service/BroadCast Recevicer/Content  provider Activity:activity是用户和应用程序交互的窗口,一个activity相当于我们实际中的一个网页,当打开一个屏幕时,之前的那一个屏幕会被置为暂停状态,并且压入历史堆栈中,用户可以通过回退操作返回到以前打开过的屏幕. activity的生命周期:即"产生.运行.销毁",但是这其中会调用许多方法onCreate(创建) .onSta

Android笔记(六十)Android总结:四大组件——BroadcastReceiver篇

什么是BroadcastReceiver BroadcastReceiver是Android体系的四大组件之一,本质上是一种全局的监听器,用于监听系统全局的广播消息,正式因为其本质为全局监听,因此可以非常方便的实现系统中不同组件之间的通信.也方便我们自己的app针对系统开机.电量低等广播做出相应反映.同时我们也可以自己发送广播,来实现不同组件之间的通信 系统接收短信广播,然后弹出Toast: package cn.lixyz.broadcastreceiver; import android.a

关于Android中的四大组件(AIDL Service的使用)

跨进程调用Service(AIDL Service) Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信. 在前一篇文章(关于Android中的四大组件(Service的开启与关闭))中介绍了开发人员如何定制自己的服务,但这些 服务并不能被其它的应用程序访问,为了使其它的应用程序也可以访问本应用程序提供的服务,Android系统采用了 远程过程调用(Remote Procedure Call,RPC)方式来实现.与很多其它的基于RPC的解决方案一样,An

Android组件Broadcast Receiver学习

Android大量使用了Broadcast Receiver来广播系统事件,如网络连接.扩展dock状态及来电的变化. 一.注意: android 中service和broadcastreceiver都是运行在主UI线程中,如果在他们中执行耗时操作,若果操作持续的时间超过android平台的约定,那么android平台会认为该程序出现异常,从而抛出ANR异常.如果在onReceive()的处理中,用户进行了UI触发,将可能引发ANR异常,不过和activity的时间限制不同,receiver在1

Android安全机制--四大组件安全

组件有Public和Private的概念,是否能被其他方调用.通过android:exported字段来确定,android:exported="true"表示能,反之不行. 默认情况下,组件在AndroidMainfest声明中没有 interfliter  那么exported为false,有了interfliter为true.当然我们可以直接输入android:exported来自己控制.以下就设置为false [html] view plaincopyprint? <ac