android 基础学习(5)-----Android Broadcast机制

来源:互联网 发布:星际淘宝网第488章 编辑:程序博客网 时间:2024/05/22 13:13


Android广播机制包含三个基本要素:
广播(Broadcast)----- 用于发送广播。

广播接收器(BroadcastReceiver)----- 用于接收广播。

意图内容(Intent)----- 用于保存广播相关信息的媒介。


Broadcast是一种广泛应用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发出来的Broadcast进行过滤接受并响应的组件。


下面对广播的过程进行详细的描述:

首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用Context.sendBroadcast()、Context.sendOrderBroadcast()或Context.sendstickyBroadcast()方法,把Intent对象以广播的方式发出去。

当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的Intentfilter是否与发送的Intent相匹配,若匹配就会调用BroadcastReceiver的void onReceive(Context curContext, Intent broadcastMsg)方法。


广播的生命周期:

广播接收器仅在它执行这个方法时处于活跃状态。当onRecever()返回后,它就变为失活状态。

拥有一个活跃状态的广播接收器的进程被保护起来不会被杀死,但仅拥有失活状态组件的进程则会在其他进程需要它所占用的内存时被杀死。所以,如果响应一个广播信息需要很长一段时间,我们一般会将其纳入一个衍生的线程中去完成,而不是在主线程中去完成它,从而保证用户交互过程的流畅性。


注册BroadcastReceiver的两种方法:

      方式一,静态的在AndroidManifest.xml中用<receiver>标签声明注册,并在标签内用<intent-filter>标签注册过滤器。

      方式二,动态地在代码中先定义并设置好一个IntentFilter对象,然后在需要注册的地方调用Context.registerReceiver()方法,如果取消时就调用Context.unregisterReceiver()方法。如果用动态方式注册的BroadcastReceiver的Context对象被销毁时,BroadcastReceiver也就自动取消注册了。

      另外,若在使用sendBroadcast()的方法是指定了接收权限,则只有在AndroidManifest.xml中用<uses-permission>标签声明了拥有此权限的BroadcastReceiver才会有可能接收到发送来的Broadcast。同样,若在注册BroadcastReceiver时指定了可接收的Broadcast的权限,则只有在保内的AndroidManifest.xml中用<uses-permission>标签声明了,拥有此权限的Context对象所发送的Broadcast才能被这个BroadcastReceiver接收。

      动态注册:

      IntentFilter intentFilter = new IntentFilter();

      intentFilter.add(Action); //为BroadcastReceiver指定action,使之用于接收同action的广播。

      registerReceiver(BroadcastReceiver, intentFilter);

      一般在onStart()中注册,onStop()中取消。指定广播目标Action:Intent intent = new Intent(action--String),指定了此action的receiver会接收此广播。

原创粉丝点击