Mars Android视频学习笔记——01_21/22_广播机制
来源:互联网 发布:收纳好物 知乎 编辑:程序博客网 时间:2024/04/29 10:45
转载时请注明转自:http://blog.csdn.net/sam_zhang1984
交流可加新浪微博:Android开发人
Android中的广播,可以理解成系统发出的消息,我们通过接收这些广播可以进行相应的处理。
为了要接收系统的广播,需要继承BroadcastReceiver,生成自己的类,并覆写其onReceive方法,这个方法就是进行消息处理的实体,即用于接收消息并进行相应处理,代码如下:
注:
广播接收类在执行完onReceive后,这个类就没用了,就成为垃圾对象了,如果再次接收到广播时,将再重新生成一个BroadcastReceiver对象。
每个BroadcastReceiver对象分别用来处理不同的广播事件,如何来区分每个BroadcastReceiver对象所接收的广播,就需要对BroadcastReceiver对象进行注册。BroadcastReceiver对象注册有两种方法:一种是在Manifest.xml文件中注册;另一种是在代码中注册。
这两种注册方法的区别是:
1、在Manifest.xml中把我们生成的广播接收类注册到Android系统中去,并声明其所要接收的广播。用这种注册方法即使你的应用程序被关闭,你的BroadcastReceiver仍然会接收到系统的广播。
在Manifest.xml中注册的代码是:
2、在代码中注册BroadcastReceiver,则在程序被关闭时,BroadcastReceiver不再接收系统的广播。通常利用BroadcastReceiver更新UI时,会使用这种注册,因为一个Activity里的UI只有看得见的时候更新才有意义,如果程序关闭了更新就没意义了,这种情况下,就在Activity启动时进行注册,而在Activity不可见时取消注册。
利用代码注册BroadcastReceiver时有以下步骤:
1)生成一个BroadcastReceiver对象;
2)生成一个IntentFilter对象;
3)为IntentFilter对象添加一个Action;
4)利用IntentFilter和BroadcastReceiver绑定注册一个BroadcastReceiver。
代码如下:
当要解除BroadcastReceiver对象的注册时,可执行以下代码:
注意:当如果要进行的操作需要花费比较长的时间,则不适合放在BroadcastReceiver中进行处理,引用网上找到的一段解释:
“在Android中,程序的响应(Responsive)被活动管理器(Activity Manager)和窗口管理器(Window Manager)这两个系统服务所监视。当BroadcastReceiver在10秒内没有执行完毕,Android会认为该程序无响应。所以在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR(Application No Response)的对话框。如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成。而不是使用子线程的方法来解决,因为BroadcastReceiver的生命周期很短(在onReceive() 执行后BroadcastReceiver 的实例就会被销毁),子线程可能还没有结束BroadcastReceiver就先结束了。如果BroadcastReceiver结束了,它的宿主进程还在运行,那么子线程还会继续执行。但宿主进程此时很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。 ”
所以如果要进行的操作占用时间比较长,最好能调用新的Activity或Service进行处理,在调用Intent调用新的 Activity或Service时,其代码如下:
但至于为什么需要使用service.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 目前还没完全理解,这个setFlags还没有特别明白,以后再补充,或看到的看官,如果知道可以留言补充!
- Mars Android视频学习笔记——01_21/22_广播机制
- Mars Android视频学习笔记——01_21/22_广播机制
- mars老师[Android开发视频教学] 01_21 广播机制(1)
- 01_21/22:广播机制
- Mars Android视频学习笔记——01_16_SQLite使用方法
- Mars Android视频学习笔记——01_16_SQLite使用方法
- Mars Android视频学习笔记——03_03/04_用户定位
- Mars Android视频学习笔记——03_03/04_用户定位
- Mars Android视频学习笔记
- Mars Android视频学习笔记
- Android学习笔记——广播机制
- Android学习笔记——广播机制
- Mars Android视频学习笔记——01_23_WIFI网络操作
- Mars Android视频学习笔记——01_14/15_Handler的使用
- Mars Android视频学习笔记——01_18_文件下载
- Mars Android视频学习笔记——01_20_XML文件解析
- Mars Android视频学习笔记——01_14/15_Handler的使用
- Mars Android视频学习笔记——01_18_文件下载
- paint()与paintComponent()的区别
- Ubuntu Linux系统下apt-get命令详解
- 如何
- 周末扎记 - 配置管理,云计算,行云服务
- zoj1051
- Mars Android视频学习笔记——01_21/22_广播机制
- 郁闷
- 云计算时代的操作系统
- 【转】Linux 的多线程编程的高效开发经验
- Windows下启动停止Oracle11g服务
- 三月过去了一半,马克一下
- 毕业毕业!!!
- 创业与梦想
- 『转』Struts2 标签库