当前位置:操作系统 > 安卓/Android >>

[Android面试题-8] BroadCastReceiver的两种注册方式的异同

 在Android手机应用程序中开发中,需要用到BroadcastReceiver来监听广播的消息。在自定义好BroadcastReceiver ,需要对其进行注册,注册有两种方法,一种是在代码当中注册,注册的方法是registerReceiver(receiver,filter)(用Activity的实例来调用),取消注册的方法:unregisterReceiver(receiver),如果一个BroadcastReceiver用于更新UI(User Interface),那么通常会使用这种方法进行注册,在Activity启动的时候进行注册,在Activity不可见后取消注册;另一种就是在 AndroidManifest当中进行注册。
 
下面简单的看一下两种注册方式:
第一种:使用代码进行订阅
[java]  
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");  
IncomingSMSReceiver receiver = new IncomingSMSReceiver();  
registerReceiver(receiver, filter);  
 
第二种:在AndroidManifest.xml文件中的<application>节点里进行订阅:
[html]  
<receiver android:name=".IncomingSMSReceiver">  
    <intent-filter>  
         <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
    </intent-filter>  
</receiver>  
 
注册完之后即可以发送广播,使用Context.sendBroadcast()、Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast()来实现,接收端代码:
[java]  
public class IncomingSMSReceiver extends BroadcastReceiver {  
       @Override  
       public void onReceive(Context context, Intent intent) {  
              //todo...接收广播,做自己的业务   }  
}  
 
以上完成了广播的注册、发送和接收处理的过程,其中包含了注册广播的两种方式,接下来讨论一下两种广播注册方式的区别:
        区别:
        在AndroidManifest中进行注册后,不管改应用程序是否处于活动状态,都会进行监听,比如某个程序时监听 内存 的使用情况的,当在手机上安装好后,不管改应用程序是处于什么状态,都会执行改监听方法中的内容。
        在代码中进行注册后,当应用程序关闭后,就不再进行监听。我们读知道,应用程序是否省电,决定了该应用程序的受欢迎程度,所以,对于那些没必要在程序关闭后仍然进行监听的Receiver,在代码中进行注册,无疑是一个明智的选择。
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,