广播Broadcast

一、广播

广播是android中应用程序之间传输信息的机制。

BroadcastRecevier 广播接收者 是对发送出来的广播进行接收、过滤(通过action)、相应的一类组件。

二、广播的两种实现方式

1、静态注册广播

静态广播需要在AndroidManifest文件中注册,可以在程序未启动的情况下就能接收到广播

静态广播的使用

接收静态广播

(1)新建一个类继承自BroadcastRecevier

接收到广播时会,会回调onRecevier()方法

public class MyReceiver extends BroadcastReceiver {
    static final String ACTION = "com.songjialongs.MY_RECEVIER";

    @Override
    public void onReceive(Context context, Intent intent) {
        //======通过action过滤广播
        if (intent.getAction().equals(ACTION)) {
            Toast.makeText(context, "接收到静态广播", Toast.LENGTH_LONG).show(); //处理响应广播
        }
    }
}


(2)在AndroidManifest中注册相应的BroadcastRecevier

 <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.songjialongs.MY_RECEVIER" />
            </intent-filter>
        </receiver>

静态广播的发送

 Intent intent = new Intent(MyReceiver.ACTION);
                //通过intent隐式调用,MyReceiver.ACTION是在上面新建的MyRecevier类定义的广播的action的字符串
                sendBroadcast(intent);//发送广播

2、动态注册广播

动态广播可以自由的控制广播的注册与销毁,随着程序启动而创建,一般是在Activity的onResum()方法中注册,在onPause()方法中注销

接收动态广播

(1)在Activity中实例化BroadcastRecevier并实现onRecevier()

 static final String ACTION = "com.songjialongs.MY_DYNAMIC_RECEVIER";
    BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(MainActivity.ACTION)) {
                Toast.makeText(context, "接收到动态广播", Toast.LENGTH_LONG).show(); //处理响应广播
            }
        }
    };

(2)在Activity的onResum()中注册广播,onPause()中注销广播

@Override
    protected void onResume() {
        IntentFilter intentFilter = new IntentFilter(MainActivity.ACTION);
        registerReceiver(mBroadcastReceiver, intentFilter);
        super.onResume();
    }
 @Override
    protected void onPause() {
        unregisterReceiver(mBroadcastReceiver);
        super.onPause();
    }

动态广播的发送

 Intent intent = new Intent(MainActivity.ACTION);
                sendBroadcast(intent);

三、广播的生命周期

BroadcastRecevier的生命周期只有10秒左右,接收到广播时候会回调onReceive(),执行完成后会销毁对象,如果在onRecevice()中执行耗时操作,会导致应用无响应。如果要在onReceive中执行耗时操作,应该通过Intent启动Service执行。


四、本地广播LocalBroadcast

一般广播实现的是程序之间的通讯,可以跨程序接收,而本地广播是通过Handler实现发送和接收处理广播,只能在本应用中接收到。

接收本地广播

(1)和一般广播类似,在Activity中实例化BroadcastRecevier并实现onRecevier()

 BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(MainActivity.ACTION)) {
                Toast.makeText(context, "接收到动态广播", Toast.LENGTH_LONG).show(); //处理响应广播
            } else if (intent.getAction().equals(MainActivity.LOCAL_ACTION)) {
                Toast.makeText(context, "接收到本地广播", Toast.LENGTH_LONG).show();
            }
        }
    };

(2)注册广播

 IntentFilter intentFilter1 = new IntentFilter(MainActivity.LOCAL_ACTION);
        //本地广播通过LocalBroadcastManager类实例注册本地广播
        LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, intentFilter1);
        super.onResume();

发送本地广播

 Intent intent = new Intent(MainActivity.LOCAL_ACTION);
                LocalBroadcastManager.getInstance(MainActivity.this).sendBroadcast(intent);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值