Android Broadcast 要点总结

来源:互联网 发布:那些游戏不用网络 编辑:程序博客网 时间:2024/05/20 11:24
广播作为android中的四大组件之一,应用场景很多。以下就广播接收器的不同属性分类进行总结。
1、广播分为无序广播和有序广播
     1.1 无序广播:Context.sendBroadcast();
          广播发送没有顺序,多个receiver随机顺序接收;如果receiver 未注册,则数据不保留。
     1.2 有序广播:Context.sendOrderedBroadcast(intent,permission)
          广播发送后receiver 有接收顺序,根据优先级从大到小,priority属性为优先级<-1000    1000>;高优先级的receiver可先接收数据并处理,可以在intent中加入数据setResultExtra 在下个receiver中getResultExtra   或关闭广播abortBroadcast()。
          有序广播可在发送时加入permission,只有在AndroidManifest文件中加入该权限的应用才能接收到该广播,权限可自定义。

     注:Context.sendStickyBroadcast在API 23中不推荐使用,因为没有权限设置纯在安全风险。使用该方法需要配置权限,如果广播未读会被最后一条替换,只保留最后一条。< uses-permission android :name="android.permission.BROADCAST_STICKY" />。

2、BroadcastReceiver的注册分为静态注册和动态注册
     2.1 静态注册:
          在AndroidManifest文件中加入<receiver>
< receiver android:name= ".OrderedBroadcast" >    <intent-filter >        <action android :name="com.android.action.send.order"                android:priority= "400" />    </intent-filter ></receiver >

     2.2 动态注册:
          在java代码中动态注册,注册需要在Activity的onResume()中registerReceiver,在onPause()中unregisterReceiver。
3、全局广播和内部广播
receiver在注册时定义该Receiver是全局还是内部的。
默认值由是否使用了intent-filter决定,使用后就是默认全局,不使用时默认内部。开发人员可通过android:exported="true"来设置全局。
设置了内部的Receiver就无法接收应用之外的广播消息。
4、BroadcastReceiver的lifeCycle
      官方说明:A BroadcastReceiver object is only valid(有效的) for the duration of the call to onReceive(Context, Intent). Once your code returns from this function, the system considers the object to be finished and no longer active.
      在onReceiver方法结束后就可能立即被释放,因此在这里不适合做耗时操作。BroadcastReceiver在主进程中。

0 0