Android四大组件之BroadcastRecevier

          Android中的广播接收者是Android四大组件之一,广播机制是一个典型的发布—订阅模式,即观察者模式。

广播机制最大的特点就是发送方并不关心接收方是否接收到数据,也不关心接收方如何处理数据,通过这样的方式来达到接收方完全解耦。

Android广播机制包含三个元素,分别是用于发送广播的Broadcast,接收广播的BroadcastReceiver以及用于传递信息的intentAndroid广播可分为:普通广播、有序广播、本地广播和Sticky广播。

       1、普通广播

    普通广播是完全异步的,通过ContextsendBroadcast(),函数来发送,消息传递的效率比较高,但是所有的receviers执行的顺序不确定。缺点:接收者不能将处理的结果传递给下一个接收者,并且无法阻止广播Intent的传播,一直到没有与之匹配的广播接收器为止。

       2、有序广播

    有序广播比较特殊,它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播

下面我们看一下一个简单的发送广播的Demo

 

 

 

 在清单文件中注册广播:

   <!-- 注册广播 -->

        <receiver

            android:name="com.example.broadcastrecevier.MyBroadcastReceiver">

            <intent-filter >

                <!-- 需要匹配的action -->

                <action android:name="android.intent.action.MY_BROADCAST"/>

            </intent-filter>

        </receiver>

 在activity中发送广播:

package com.example.broadcastrecevier;

 

import android.os.Bundle;

import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

 

public class MainActivity extends Activity {

 

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.button).setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

//intent里边的android.intent.action.MY_BROADCAST应该与清单文件中的action保持一致,才回有广播相应

Intent intent = new Intent("android.intent.action.MY_BROADCAST");

//intent来发送我们广播接收到数据

intent.putExtra("msg", "发送广播了");

//发送广播

sendBroadcast(intent);

}

});

}

 

}

 然后创建广播接收者:

package com.example.broadcastrecevier;

 

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.widget.Toast;

 

public class MyBroadcastReceiver extends BroadcastReceiver {

 

@Override

public void onReceive(Context context, Intent intent) {

//Toast.makeText(context, "发送广播了", 0).show();

//接受来自intent传递来的数据

String msg=intent.getStringExtra("msg");

Toast.makeText(context, msg, 0).show();

System.out.println("********"+msg);

}

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值