Broadcast

  • 广播接收者和广播发送者的执行是异步的
  • 动态广播是在代码里注册的,静态广播是在AndroidManifest.xml(清单文件)中注册的。
    • 动态广播最好在Activity 的 onResume()注册、onPause()注销。
      • 对于动态广播,有注册就必然得有注销,否则会导致内存泄露
      • 不在onCreate() & onDestory() 或 onStart() & onStop()注册、注销
        • 内存不足Activity只跑onPause
    • 动态注册广播不是常驻型广播,也就是说广播跟随 Activity 的生命周期
      • Activity 结束前,移除广播接收器
      • 可以根据自己需求特定时刻监听广播
    • 静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行
      • 时刻监听广播
  • 有序广播-Ordered Broadcast
    • 按照Priority属性值从大-小排序, Priority属性相同者,动态注册的广播优先
    • 先接收的广播接收者可以对广播进行截断,即后接收的广播接收者不再接收到此广播
    • 先接收的广播接收者可以对广播进行修改,那么后接收的广播接收者将接收到被修改后的广播
  • 应用内广播
    • 将全局广播改为局部广播
      • 将exported属性设置为false
      • 在广播发送和接收时,增设相应权限permission,用于权限验证
      • 发送广播时指定该广播接收器所在的包名
        • 通过intent.setPackage(packageName)指定报名
    • 使用封装好的LocalBroadcastManager类
      • 对于LocalBroadcastManager方式发送的应用内广播,只能通过LocalBroadcastManager动态注册,不能静态注册