zoukankan      html  css  js  c++  java
  • Android 四大组件 (三) BroadcastReceiver 介绍

    一. BroadcastReceiver 使用场景

      Broadcast主要是用作消息通信(专业术语叫IPC),Android的IPC基本都是binder来实现,那么这里的BroadcastReceiver其实也是对binder的一个封装,方便上层调用。开发过程中遇到的单进程多线程通信的场景比较多,所以这种情况下使用Broadcast并不是最佳选择,很多人会自己实现一套 Observer 或者使用EventBus等第三方库来完成该功能,不可否认,他们在这种场合下不论是效率还是灵活性方面都更具优势。但是,BroadcastReceiver既然能够在Android四大组件中占有一席之地,自然也有它独有的优势,第一个是系统相关事件的监听,比如开机启动,网络连接,电量变化等,第二个是多进程通信,这些是Observer 或者EventBus很难办到的。所以BroadcastReceiver的使用需要看具体的使用场景,像单进程多线程这种场景,就不建议用BroadcastReceiver了,有种杀鸡用牛刀的赶脚,使用Observer 或者EventBus更适合;但是对于需要监听系统广播事件的场合,比方说现在很多进程保活机制里面就用到了一些系统广播的监听,就正是BroadcastReceiver大展拳脚的时候了。

    二.BroadcastReceiver 系统广播

    Android中内置了多个系统广播:只要涉及到手机的基本操作(如开机、网络状态变化、拍照等等),都会发出相应的广播。每个广播都有特定的Intent - Filter(包括具体的action),Android系统广播action如下:

    系统操作action
    监听网络变化 android.net.conn.CONNECTIVITY_CHANGE
    关闭或打开飞行模式 Intent.ACTION_AIRPLANE_MODE_CHANGED
    充电时或电量发生变化 Intent.ACTION_BATTERY_CHANGED
    电池电量低 Intent.ACTION_BATTERY_LOW
    电池电量充足(即从电量低变化到饱满时会发出广播 Intent.ACTION_BATTERY_OKAY
    系统启动完成后(仅广播一次) Intent.ACTION_BOOT_COMPLETED
    按下照相时的拍照按键(硬件按键)时 Intent.ACTION_CAMERA_BUTTON
    屏幕锁屏 Intent.ACTION_CLOSE_SYSTEM_DIALOGS
    设备当前设置被改变时(界面语言、设备方向等) Intent.ACTION_CONFIGURATION_CHANGED
    插入耳机时 Intent.ACTION_HEADSET_PLUG
    未正确移除SD卡但已取出来时(正确移除方法:设置–SD卡和设备内存–卸载SD卡) Intent.ACTION_MEDIA_BAD_REMOVAL
    插入外部储存装置(如SD卡) Intent.ACTION_MEDIA_CHECKING
    成功安装APK Intent.ACTION_PACKAGE_ADDED
    成功删除APK Intent.ACTION_PACKAGE_REMOVED
    重启设备 Intent.ACTION_REBOOT
    屏幕被关闭 Intent.ACTION_SCREEN_OFF
    屏幕被打开 Intent.ACTION_SCREEN_ON
    关闭系统时 Intent.ACTION_SHUTDOWN
    重启设备 Intent.ACTION_REBOOT

    三.BroadcastReceiver 注册方式

    1.静态注册

    AndroidManifest.xml:
    
    <receiver android:name=".broadcastreceiver.TestBroadcastReceiver">
                <intent-filter>
                    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                </intent-filter>
    </receiver>
    

    2.动态注册

            IntentFilter mFilter = new IntentFilter();
            mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
            TestBroadcastReceiver mReceiver = new TestBroadcastReceiver();
            registerReceiver(mReceiver, mFilter);
    

      

  • 相关阅读:
    火狐 http://localhost:8080自动跳转到http://www.localhost.com:8080
    Windows下搭建PHP开发环境
    对帝国cms、dedecms、phpcms等负载测试总结
    System.ExecutionEngineException: Attempting to JIT compile method System.Linq.Enumerable
    SQLCMD Mode: give it one more chance
    transition状态下Mecanim动画的跳转
    Lua库-bit32库
    C语言输入输出函数总结
    Lua库-table
    Lua中的数据结构
  • 原文地址:https://www.cnblogs.com/bugzone/p/BroadcastReceiver.html
Copyright © 2011-2022 走看看