zoukankan      html  css  js  c++  java
  • BroadCast详解

     1.广播的作用?

       (1)实现不同程序之间的数据传输和共享,只要和发送广播的action相同的接收者都能接收这个广播,比如Android的短信电话广播,只要我们实现了他们的action广播,就能接收他们的数据,以便进行下一步处理。

       (2)起到一个通知的作用,比如在Service中通知主程序,更新主程序的UI等。因为Service是没有界面的,所以不能直接获得主程序的控件,这样我们就能在主程序中实现一个广播接收器来专门接收Service发过来的数据和通知。

     2.广播的注册方式

       (1)清单文件注册(静态注册)

         只要应用程序被部署到手机上,就立刻生效,不管进程是否处于运行状态。

        

      (2)代码注册(动态注册)

        只有代码运行了,广播接收器才有效,如果代码运行结束,广播接收器就失效了。要注意在Activity销毁时一定要解注册。

        

     3.发送广播的方式

      (1)普通广播

       普通广播对于多个接收者是完全异步的,通常每个接收者无需等待即可接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。

        

      (2)有序广播

       每次只发生到优先级高的接收者那里,然后有优先级高的接收者再转递给优先级低的接收者那里,优先级高的接收者有能力终止这个广播。

         

     4.广播的生命周期

          (1)广播接收者的生命周期非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁;

            (2)广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框;

            (3)最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉;

            (4)耗时的较长的工作最好放在Service中完成;

     5.注意

      如果在广播的回调方法中启动Activity必须设置 i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);因为每个Activity必须建立在一个任务栈中,这个flag指定了Activity的启动模式,这个flag的意思就是在一个新的任务栈中启动。在Activity里面用startActivity这个方法去启动一个新的Activity的时候,Intent有默认的启动模式。而在Activity之外调用startActivity方法时候没有默认的启动模式。比如在service或者broadcastReceiver等,中都需要指定Activity一个启动模式。

  • 相关阅读:
    zuul prefix
    zuul忽略表达式
    zuul 自定义路由映射规则
    ribbon重试机制
    feign容断忽略某些异常
    cloud turbine
    hystrix 给方法加断路器
    go语言常用函数:cap
    windows 安装 go语言
    mysql win源码比较大 不需要的文件删除 记录下来
  • 原文地址:https://www.cnblogs.com/yangang2013/p/4937521.html
Copyright © 2011-2022 走看看