Android基础--------广播

来源:互联网 发布:java 线程中断机制 编辑:程序博客网 时间:2024/06/15 10:05
Broadcast Receiver

广播算是比较特殊的一个组件  
它在使用的时候有两种注册模式   一种是静态注册 一种是动态注册  

静态注册就是在清单文件中注册   
  这种注册方法有些频繁使用的广播是不支持静态注册的 因为每次都要便利清单文件  同时 广播的触发条件又较为频繁(如屏幕是否关闭等)
  这种注册的广播持续时间长(全程有效)

动态注册是在代码中注册广播  需要注意的是动态注册的广播需要反注册掉 否则会内存泄漏  (某些特殊的广播监听  如待机之类的发生比较频繁的事件不支持静态注册 ----频繁遍历所有清单文件)

广播分为两种 一种是有序广播(可以拦截) 一种是无序广播  不能拦截  

广播在创建的时候也是需要继承  基类 BroadcastReceiver   

或者 直接new一个BroadcastReceiver    重写其中的onReceive()方法   

在注册广播的时候需要给广播添加一个action       通过IntentFilter可以给广播添加一个Action   如果是静态注册直接写在清单文件即可

代码注册的示例:
 IntentFilter filter = new IntentFilter();
 filter.addAction(REFLUSH);
 registerReceiver(receiver, filter);


清单文件注册示例 (极光推送的广播注册)

<receiver
   android:name="cn.jpush.android.service.PushReceiver"
   android:enabled="true"
   android:exported="false" >
       <intent-filter android:priority="1000" >
           <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <!-- Required  显示通知栏 -->
           <category android:name="cn.bizfocus.expense" />
       </intent-filter>
       <intent-filter>
           <action android:name="android.intent.action.USER_PRESENT" />
           <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
       </intent-filter>
       <!-- Optional -->
       <intent-filter>
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />

            <data android:scheme="package" />
       </intent-filter>
</receiver>

正常使用时通过onReceive() 方法中的intent.getAction  来判断是哪一个是否是自己的广播
然后 写入逻辑代码

动态注册和静态注册的优缺点:
动态注册广播可以灵活地控制广播的开启和关闭十分灵活  但是动态注册的广播只有在程序原型后广播被注册后才能接收到广播  

静态注册的广播  不是必须在程序启动后才可以接收广播

0 0
原创粉丝点击