动/静态注册广播的区别

动态注册

  1. 在代码中注册
  2. 一定要取消注册,unregisterReceiver()
  3. 在程序启动后才能收到广播,因为注册的逻辑写在OnCreate里面的

静态注册

  1. 在AndroidManifest.xml中注册
  2. 可以在程序未启动的情况下收到广播

动态注册过程

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private MyDynamicReceiver myReceiver;

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

        intentFilter = new IntentFilter();
        intentFilter.addAction("这里写你的Action");
        myReceiver = new MyDynamicReceiver();
        registerReceiver(myReceiver,intentFilter);//动态注册
    }

    private class MyDynamicReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            //写下收到广播后所执行的操作
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceiver);//取消注册
    }
}

静态注册过程

1.新建一个自己的Receiver类

public class MyStaticReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //写下收到广播后所执行的操作
    }
}

2.在AndroidManifest进行注册

exported当前broadcast Receiver 是否可以从当前应用外部获取Receiver message
enabled这个属性用于指定 Android系统能否实例化应用程序组件

<receiver android:name=".MyStaticReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="这里写你的Action"></action>
    </intent-filter>
</receiver>

其他

不要在onReceive()方法中添加过多的逻辑或者进行任何的耗时操作,因为在广播接收器中是不允许开线程的,当onReceiver()方法运行了较长时间而没有结束时.程序会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值