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 来判断是哪一个是否是自己的广播
然后 写入逻辑代码
动态注册和静态注册的优缺点:
动态注册广播可以灵活地控制广播的开启和关闭十分灵活 但是动态注册的广播只有在程序原型后广播被注册后才能接收到广播
静态注册的广播 不是必须在程序启动后才可以接收广播
广播算是比较特殊的一个组件
它在使用的时候有两种注册模式 一种是静态注册 一种是动态注册
静态注册就是在清单文件中注册
这种注册方法有些频繁使用的广播是不支持静态注册的 因为每次都要便利清单文件 同时 广播的触发条件又较为频繁(如屏幕是否关闭等)
这种注册的广播持续时间长(全程有效)
动态注册是在代码中注册广播 需要注意的是动态注册的广播需要反注册掉 否则会内存泄漏 (某些特殊的广播监听 如待机之类的发生比较频繁的事件不支持静态注册 ----频繁遍历所有清单文件)
广播分为两种 一种是有序广播(可以拦截) 一种是无序广播 不能拦截
广播在创建的时候也是需要继承 基类 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 来判断是哪一个是否是自己的广播
然后 写入逻辑代码
动态注册和静态注册的优缺点:
动态注册广播可以灵活地控制广播的开启和关闭十分灵活 但是动态注册的广播只有在程序原型后广播被注册后才能接收到广播
静态注册的广播 不是必须在程序启动后才可以接收广播