Android 知识点

BroadcastReceiver注册方式与区别

2018-12-25  本文已影响0人  怡红快绿

广播作为Android四大组件的一员,在整个系统中扮演者很重要的角色。

广播注册的方式分为两种,静态注册和动态注册。

1、静态注册

直接在AndroidManifest.xml里通过<receive>标签声明。

使用示例

<receiver
      android:name=".util.jiguang.JPushReceiver"
      android:enabled="true"
      android:exported="false">
         <intent-filter>
             <action android:name="cn.jpush.android.intent.REGISTRATION" />
             <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
             <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
             <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
             <action android:name="cn.jpush.android.intent.NOTIFICATION_CLICK_ACTION" />
             <action android:name="cn.jpush.android.intent.CONNECTION" />
             <category android:name="${JPUSH_PKGNAME}" />
        </intent-filter>
</receiver>

当应用启动时,系统会自动实例化JPushReceiver类,并注册到广播系统中,这个步骤由系统自动完成。
静态注册广播的特点是:广播常驻后台,不会随着其他组件的消亡而变化。这样的话不仅占用内存,而且会增加应用的耗电量。

2、动态注册

在代码中调用Context.registerReceiver()方法完成注册。为了避免内存泄漏,当广播不再使用时,开发者需要手动注销广播。

使用示例

/*****注册广播*****/
// 1. 实例化BroadcastReceiver子类 &  IntentFilter
JPushReceiver mBroadcastReceiver = new JPushReceiver();
IntentFilter intentFilter = new IntentFilter();
// 2. 设置接收广播的类型
intentFilter.addAction("XXX");
// 3. 动态注册:调用Context的registerReceiver()方法
registerReceiver(mBroadcastReceiver, intentFilter);
/*****注销广播*****/
if(mBroadcastReceiver!=null) {
   unregisterReceiver(mBroadcastReceiver);
}

动态注册广播的特点是:注册和注销的过程需要开发者自己手动完成,生命周期灵活可控。

作为开发者必须要知道的是,随着Android系统的不断更新迭代,广播的发布规则也发生了一些变化。

上一篇 下一篇

猜你喜欢

热点阅读