今天介绍一下Android的四大组件之一的BroadCastReceiver,即广播。广播类似于JAVA设计模式中的观察者模式,即当被观察者数据变化的时候,会去通知观察者做相应处理。这里也是一样,当发出广播的时候,那么注册过该广播的人,就能收到这个广播,进而做一些工作。

  上面说的广播注册,在Android中有两种方式,即动态注册(代码注册)、静态注册(清单文件注册),下面我以Android中网络状态变化发出的广播作为例子,看看这两种方式的具体用法。

 


动态注册:即用代码动态的注册、注销广播

public class DynamicInternetActivity extends AppCompatActivity {    private InternetDynamicBroadCastReceiver mReceiver;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_dynamic_lock_screen);        IntentFilter filter = new IntentFilter();        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);        mReceiver = new InternetDynamicBroadCastReceiver();        this.registerReceiver(new InternetDynamicBroadCastReceiver(), filter);    }    @Override    protected void onDestroy() {        super.onDestroy();        unregisterReceiver(mReceiver);    }    public class InternetDynamicBroadCastReceiver extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {            Toast.makeText(DynamicInternetActivity.this,"网络发生了变化",Toast.LENGTH_SHORT).show();        }    }}

  在清单文件中注册该广播接受者。

 

  注意:上面在onDestroy方法中,必须注销广播,否则有内存泄漏的风险!!!

 


静态广播:把广播写死在manifest.xml中

public class InternetStaticBroadCastReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context,"网络发生了变化",Toast.LENGTH_SHORT).show();    }}

在清单文件中注册该广播接受者。

                    //此处必需指定action,否则监听不到    

  注意:静态注册的广播,必需单独成一个类,不能像动态注册那样写在某个界面里。否则当监听到网络状态变化的时候,会抛出异常。

 

动态注册和静态注册的区别:

  动态注册的广播会受Activity的生命周期的影响, 当Activity销毁的时候,广播就失效了。

  而静态注册的广播,即使Activity销毁了,仍然可以收到广播。更牛掰的是即使杀死进程,仍然可以收到广播,关于这点不同的手机测试的结果是不同的,为了验证这个问题,我用的是google的nexus手机测试的。

  在Android中,有一些action是不支持静态注册的:

    android.intent.action.SCREEN_ON

    android.intent.action.SCREEN_OFF

    android.intent.action.BATTERY_CHANGED

    android.intent.action.CONFIGURATION_CHANGED

    android.intent.action.TIME_TICK

     

转载于:https://www.cnblogs.com/lang-yu/p/6170325.html

更多相关文章

  1. Android学习之坑——静态广播问题
  2. Android(安卓)Ble从模式(Peripheral)开发
  3. Android—启动内置APK和动态发送接收自定义广播
  4. Android的Activity, Intent 和 Service
  5. 第一行代码第二版(郭霖著)笔记之第五章(详解广播机制)
  6. 基于Android的记事本的设计与开发(实验报告+源代码)
  7. 监听android屏幕亮、暗、锁和关闭系统动作
  8. Android(安卓)应用自动启动的两种方法(开机自启动 与 另一个应用
  9. android aar 包含静态库的打包

随机推荐

  1. android layout以及一些常用的android控
  2. Permissions
  3. Android Layout XML属性研究--android:la
  4. 【转载】【Android】Android Camera 使用
  5. Android实现使用流媒体播放远程mp3文件的
  6. android 中 焦点控制
  7. Android中文 API (31) ―― TimePicker
  8. Android 四大核心组件之Activity[生命周
  9. android api Demo之自定义Animation,实现3
  10. 《Android 智能穿戴设备开发-从入门精通