• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android四大组件之BroadcastReceiver

Android四大组件之BroadcastReceiver

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了broadcastreceiver,android四大组件,android四大组件详解,android四大组件简介,android四大组件作用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android四大组件之BroadcastReceiver


BroadcastReceiver 简介

BroadcastReceiver 广播是一种订阅–通知 事件,广播接收者向Android系统 register (订阅广播),广播发送者向Adnroid系统 sendBroadCast(发送广播),然后Android 系统通知所有注册该广播的接收者,广播接收者收到自己注册的广播之后实现自己想做的事情(该事情一般不超过10s,否则应用会出现ANR)。

BroadCast的分类:

无序广播:也就是普通广播,只要注册了该action的广播接收者都能收到该广播,且没有先后顺序。

有序广播:广播接收者按照优先级高低依次接受该广播,并且优先接收的广播可以通过setResultExtras(Bundle)方法,将处理好的结果传送到下一个广播接收者那里。

粘性广播:发送广播调用的方法 sendStickyBroadcast(Intent),和sendBroadcast(Intent)不同。
粘性广播会一直保留在内存当中,直到有广播接收者注册该广播,该广播才算结束。不好解释,等会具体看例子。

BroadCase的使用:

一.普通广播:

根据注册方式不同可以分为 静态注册广播和动态注册广播。

1.静态注册广播使用实例

AndroidManifest.xml 如下:




    
        
            
                

                
            
        

        
        
            
                
            
        
    

2.广播接收者实现如下:

package com.xjp.mybroadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

/**
 * Description:静态广播接收器
 * User: xjp
 * Date: 2015/5/14
 * Time: 14:56
 */

public class BroadCastReceive1 extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //TODO 接收到广播之后处理自己的事情
        String action = intent.getAction();
        String result = intent.getStringExtra("key");
        MyLog.d("the BroadCast action is " + action + "   the BroadCast receive result is " + result);
    }
}

3.广播发送者实现如下:

package com.xjp.mybroadcast;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;


public class MainActivity extends ActionBarActivity implements View.OnClickListener {

    private Button btnSend;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnSend = (Button) findViewById(R.id.button);
        btnSend.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                sendBraodCast();
                break;
        }
    }

    private void sendBraodCast() {

        /**
         * 申明静态广播的 action 行为
         */
        String action = "com.xjp.mybroadcast.BroadCastReceive1";
        Intent intent = new Intent(action);
        intent.putExtra("key", "静态广播测试");
        sendBroadcast(intent);
    }
}

打印结果如下:
\

4.静态注册广播特点:

注册广播在 AndroidManifest.xml中。 广播接收者需重新 继承 BroadcastReceiver 类来实现 onReceive()抽象方法。 应用退出无需 注销广播,因此导致:即使广播退出之后,如果有其他应用发送该action行为的广播,此应用还是能接收到该广播的,也就是还会打印上面的 结果。

二.动态广播:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;


public class MainActivity extends ActionBarActivity implements View.OnClickListener {

    private Button btnSend;

    private BroadCastReceive2 myReceive;

    private IntentFilter filter;

    private final static String ACTION = "com.xjp.mybroadcast.BroadCastReceive2";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnSend = (Button) findViewById(R.id.button);
        btnSend.setOnClickListener(this);

        myReceive = new BroadCastReceive2();
        filter = new IntentFilter();
        filter.addAction(ACTION);

    }


    @Override
    protected void onResume() {
        /**
         * 注册广播
         */

        LocalBroadcastManager.getInstance(this).registerReceiver(myReceive, filter);//官方建议使用

//        this.registerReceiver(myReceive, filter);

        super.onResume();
    }


    @Override
    protected void onPause() {
        /**
         * 注销广播
         */

        LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceive);//官方建议使用

//        this.unregisterReceiver(myReceive);

        super.onPause();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                sendBraodCast();
                break;
        }
    }

    private void sendBraodCast() {

        /**
         * 申明广播的 action 行为
         */
        Intent intent = new Intent(ACTION);
        intent.putExtra("key", "动态广播测试");

        /**
         * 官方提倡使用如下发送广播,原因是更快,更安全,不会导致内存泄漏
         */
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

//        this.sendBroadcast(intent);
    }


    /**
     * 内部类实现广播接收器
     */
    private class BroadCastReceive2 extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            //TODO 接收到广播之后处理自己的事情
            String action = intent.getAction();
            String result = intent.getStringExtra("key");
            MyLog.d("the BroadCast action is " + action + "   the BroadCast receive result is " + result);
        }
    }
}

动态广播特点

在代码中调用registerReceiver()方法 注册广播。 广播接收者需重新 继承 BroadcastReceiver 类实现内部类。 动态广播在应用退出时需要 调用unregisterReceiver()方法来注销广播。如果应用退出时没有注销广播,会报如下错误:这里写图片描述
因此,我们通常的做法是:在 onResume()中注册广播,在onPause中注销广播。 当广播注销之后就接收不到任何系统发送的广播了。

三.有序广播:

示例:


package com.xjp.mybroadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.Button; public class MainActivity extends ActionBarActivity implements View.OnClickListener { private Button btnSend; private BroadCastRecei



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android深入四大组件(四)广播的注册、发送和接收过程
  • 4.3.1 BroadcastReceiver牛刀小试
  • Android中BroadcastReceiver的两种注册方式(静态和动态)详解,broadcastreceiver
  • Android-BroadcastReceiver详解
  • BroadcastReceiver--Android广播机制,broadcastreceiver
  • 解析BroadcastReceiver之你需要了解的一些东东,broadcastreceiver
  • Android--BroadcastReceiver应用详解
  • Android四大组件之BroadcastReceiver
  • Android:广播接收器(BroadCastReceiver)要点随笔。,
  • Android中BroadcastReceiver组件详解

相关文章

  • 2017-05-26Android数据存储方式--SharedPreferences,sharedpreferences
  • 2017-05-26Android实战技巧之四十八:Android上的Java8和kotlin
  • 2017-05-26关于在R中无法引用自己的xml文件,引用xml文件
  • 2017-05-26traceroute和tracert的区别
  • 2017-05-26Android中的多线程断点下载,android断点下载
  • 2017-05-26android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
  • 2017-05-26Intent(二)隐式调用intent,调用intent
  • 2017-05-26大神都是有个起点的,大神都是起点
  • 2017-05-26Android 7.0(牛轧糖)新特性,android牛轧糖
  • 2017-05-26Android之RecyclerView(二),androidrecyclerview

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 手游项目总结,游项目总结
    • Apache Cordova开发Android应用程序——番外篇,cordovaandroid
    • Android--去除EditText边框及添加下划线
    • Linux主机网络流量监控ifstat
    • 我的第一节Android课,第一节Android课
    • onTouch和onTouchEvent,ontouch
    • 菜鸟新闻1--自定义VideoView实现欢迎页,1--videoview
    • Unity实现滑页嵌套(解决ScrollRect嵌套冲突问题)
    • 解析Service之你需要了解的一些东东,解析Service之东东
    • Android源码装饰模式---ContextWrapper

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有