BroadCast详解
2015-11-04 21:40
246 查看
[b] 1.广播的作用?[/b]
(1)实现不同程序之间的数据传输和共享,只要和发送广播的action相同的接收者都能接收这个广播,比如Android的短信电话广播,只要我们实现了他们的action广播,就能接收他们的数据,以便进行下一步处理。
(2)起到一个通知的作用,比如在Service中通知主程序,更新主程序的UI等。因为Service是没有界面的,所以不能直接获得主程序的控件,这样我们就能在主程序中实现一个广播接收器来专门接收Service发过来的数据和通知。
[b] 2.广播的注册方式[/b]
(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一个启动模式。
(1)实现不同程序之间的数据传输和共享,只要和发送广播的action相同的接收者都能接收这个广播,比如Android的短信电话广播,只要我们实现了他们的action广播,就能接收他们的数据,以便进行下一步处理。
(2)起到一个通知的作用,比如在Service中通知主程序,更新主程序的UI等。因为Service是没有界面的,所以不能直接获得主程序的控件,这样我们就能在主程序中实现一个广播接收器来专门接收Service发过来的数据和通知。
[b] 2.广播的注册方式[/b]
(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一个启动模式。
相关文章推荐
- HTML中动态生成内容的事件绑定问题
- 深入理解Java的接口和抽象类
- OC初期-07NSDate,类目,延展,协议
- 父类指针指向子类对象的理解
- css选择器权值
- VS2008中opengl配置
- mongodb 性能监控
- Linux下Socket 多客户端通信
- 10月联赛集训考试总结
- Parallel dev: .NET SynchronizationContext 二三事
- zoj 1649 Rescue
- <HTML5秘籍>——第五章(音频与视频)
- iOS第三方框架---SDWebImage详解
- 映射文件xxx.hbm.xml下的各元素结构
- 持续集成环境
- iOS得知1_初体验
- JAVA_SE基础——49.多态的应用
- 计算几何与图形学有关的几种常用算法(一)
- hdu 1081(最大子矩阵和)
- @RenderBody、@RenderSection、@RenderPage、Html.RenderPartial、Html.RenderAction的作用和区别