BroadcastRecevier(广播)

BroadcastRecevier(广播)

BroadcastRecevier:广播是Android平台中应用程序之间传输信息的一种机制。
主要负责接收系统或其他程序发出的广播。

BroastcastRecevier:是对广播进行过滤接受并响应的一类组件,是Android最重要的组件之一。


广播机制特点:

广播发送方不关心接收方是否接到数据
广播发送方不关心接收方如何处理数据


广播机制的组成要素:
Broastcast:广播、用于发送广播。
BroastcastRecevier:广播接受者,用于接收广播。
intent:意图,用于保存广播相关的信息。


Broastcast的类型:(两大类)
1、普通广播:完全异步,可以在同一时刻被所有接收者接收到。
优点:信息传递效率高
缺点:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。
使用方式:Context.sendBroastcast();
2、有序广播:广播按照接收者声明的优先级别,被接收者一次接收广播。
特点:可以终止广播Intent的传播,一旦终止,后面的接收者无法接收;可以将数据传递给下一个接收者。
使用方式:Context.sendOrderBroastcastRecevier();

本地广播
系统广播

常见系统广播:
短信广播:android.provicer.Telephony.SMS_RECEVIED
开机启动广播:android.intent.action.BOOT_COMPLETED
电池电量广播:android.intent.action.BATTERY_CHANGED
拨打电话广播:android.intent.action.NEW_OUTGOING_GALL
电话状态广播:android.intent.action.PHONG_STATE


BroadcastRecevier使用过程中为什么会出现ANR?
BroadcastRecevier生命周期短,
onRecevier方法必须在10秒内完成。
解决方案:
将耗时工作通过Intent发送给Service,由Service进行处理。
Context.startService


使用步骤:
继承BroastcastRecevier
重写onRecevier
订阅广播(代码订阅,清单文件注册订阅)


代码订阅广播的写法:
第1步:继承BroastcastRecevier
第2步:重写onRecevier
public class MyBroastRecevier extends BroadcastReceiver{


    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(BroastTestActivity.MY_ACTION)){
            String data=intent.getStringExtra("data");
            Toast.makeText(context,data,Toast.LENGTH_LONG).show();
        }else{
            String data=intent.getStringExtra("data");
            Toast.makeText(context,data,Toast.LENGTH_LONG).show();
        }
    }
}
第3步:Activity中写
public static final String MY_ACTION = "com.example.lenovo.br";
Intent intent = new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("data", "这是我自己发送的广播,测试一下而已");
this.sendBroadcast(intent);
@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(recevier);
}


MY_ACTION :是自己定义的一个标识
第4步:清单文件中,注册recevier
<receiver android:name=".com.example.lenovo.myapp.recevier.MyBroastRecevier">
    <intent-filter>
        <action android:name="com.example.lenovo.br" />
    </intent-filter>
</receiver>


清单文件注册订阅广播的写法

只需要上面的第4步不写
在Activity中onCreate()中添加下面代码即可。
private MyBroastRecevier recevier;
//注册Broadcast
recevier = new MyBroastRecevier();
IntentFilter filter = new IntentFilter();
filter.addAction(MY_ACTION_REGISTER);
registerReceiver(recevier, filter);
最好在清单文件中订阅广播,在Activity中写的话,广播就依附于Activity了,Activity关闭,就不能广播了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值