zoukankan      html  css  js  c++  java
  • android中的BroadCastReceiver

    BroadCastReceiver组件本质是一种全局的监听器,用于监听系统全局的广播消息。由于BroadCastReceiver是一种全局的监听器,因此他可以非常方便的实现系统之间不同组件之间的通信。

    BroadCastReceiver简介:

    BroadCastReceiver用于接收程序(包括用户开发的程序和系统内建的程序)所发出的Broadcast Intent,程序启动BroadCastReceiver需要两步:

    1、创建需要启动的BroadCastReceiver的Intent

    2、调用Context的sendBroadcast()或sendOrderedBroadcast()方法来启动指定的BroadCastReceiver

    当应用程序发出一个Broadcast Intent之后,所有匹配该Intent的BroadcastReceiver都可能被启动。

    BroadCastReceiver本质是一个监听器,因此只要重写BroadCastReceiver的onReceive(Context context, Intent intent)方法即可。

    一旦实现了BroadCastReceiver,接下来就应该指定该BroadCastReceiver能匹配的Intent,此时有两种方法:

    1、使用代码进行指定,调用BroadCastReceiver的Context的Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter)方法指定,如:

    IntentFilter filter = new IntentFilte("android.provider.Telephony.SMS_RECEIVED");
    IncomingSMSReceiver receiver = new IncomingSMSReceiver();
    registerReceiver(receiver, filter);

    2、AndroidManifest.xml清单文件中进行配置:

     <receiver android:name=".IncomingSMSReceiver">
                <intent-filter >
                    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
                </intent-filter>
    </receiver>

    每次系统Broadcast事件发生后,系统就会创建对应的BroadcastReceiver的实例,并自动触发他的onReceive()方法,onReceive()方法执行完后,BroadcastReceiver的实例就会被销毁。

    如果BroadcastReceiver的onReceive()方法不能在10秒内执行完成,Android会认为该程序无响应。所以不要在BroadcastReceiver的onReceive()方法中执行一些耗时的操作,否则会弹出ANR的对话框。

    如果确实需要根据Broadcast来完成一项比较耗时的操作,则可以考虑通过Intent启动一个Service来完成操作。不应该使用新的线程去完成操作,因为BroadcastReceiver本身的生命周期很短,可能出现的情况是子线程可能还没有结束,BroadcastReceiver就已经退出了。如果BroadcastReceiver所在的进程结束,虽然该进程内还有用户启动的新线程,但是由于该进程内不包含任何活动组件,因此系统会在内存紧张时优先结束该进程,这样就可能导致BroadcastReceiver启动的子线程不能执行完成。

  • 相关阅读:
    【006期】JavaSE面试题(六):泛型
    【005期】JavaSE面试题(五):String类
    【004期】JavaSE面试题(四):JavaSE语法(3)
    【003期】JavaSE面试题(三):JavaSE语法(1)
    【002期】JavaSE面试题(二):基本数据类型与访问修饰符
    【001期】 | JavaSE面试题(一):面向对象
    【000期】Java最全面试题库思维导图
    LeetCode 1. 两数之和(python3)实现
    虚拟网络学习笔记一:Linux虚拟网络
    快速排序(python实现)
  • 原文地址:https://www.cnblogs.com/heml/p/3570834.html
Copyright © 2011-2022 走看看