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一个启动模式。

posted @ 2015-11-04 21:40  ✈✈✈  阅读(298)  评论(0编辑  收藏  举报