动/静态注册广播的区别

动态注册

  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()方法运行了较长时间而没有结束时.程序会报错

你可能感兴趣的:(Android)