zoukankan      html  css  js  c++  java
  • BroadcastReceiver的简介

    BroadcastReceiver本质上属于一个监听器,因此实现BroadcastReceiver的方法只要重写BroadcastReceiver的onReceive(Context  context ,Intent  intent)方法即可。

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

    1.使用代码进行指定,调用BroadcastReceiver的Context的registerReceiver(BroadcastReceiver  receiver  ,IntentFilter  filter)方法指定。例如如下代码:

        IntentFilter  filter = new IntentFilter("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(Application  No  Respose)的对话框。

    如果确实需要根据Broadcast来完成一项比较耗时的操作,则可以考虑通过Intent启动一个Service来完成该操作,不应该考虑使用新线程去完成耗时的操作,因为BroadcastReceiver本身的生命周期很短,可能出现的情况是子线程可能还没有结束,BroadcastReceiver就已经推出了。

    如果BroadcastReceiver所在的进程结束,虽然该进程内还有用户启动的新线程,但由于该进程内不包含任何活动组件,因此系统可能在内存紧张时优先结束该进程,这样就可能导致BroadcastReceiver启动的子线程不能执行完成。

  • 相关阅读:
    Weblogic_Server与EJB
    EXTJS中的表格控件(一)
    Javascript trim()函数实现
    Ajax技术的基础
    一个Ajax简单实例分析
    jQuery学习之四document ready文档就绪函数
    jQuery学习之八jQuery解析xml文件(摘录)
    jQuery学习之七jQuery效果
    jQuery学习之二css操作
    jQuery学习之六重命名jQuery库
  • 原文地址:https://www.cnblogs.com/jiww/p/5612082.html
Copyright © 2011-2022 走看看