Android基础知识整合篇——广播接收器知识点
2016-05-31 16:24
441 查看
好的,我又来完成我的个人第一个连载博客了,上次介绍的是Activity相关的基础知识,这次为大家带来广播接收器的相关解释和说明。希望博客能给诸位一点小小的帮助,也就是对我博客最大的鼓励!
四大组件——BroadcastReceiver
广播分类:标准广播:是一种完全异步执行的广播,它无法被截断,广播发出后,所有的接收器都能在同一时刻收到广播消息,因此没有先后顺序,所以它的效率比较高。
有序广播:是一种同步执行的广播,广播发出后只有一个接收器收到它,处理完成后再继续往下传播,因此这时广播存在先后顺序。优先级高的接收器可以优先接收,并且广播可以被截断。
广播接收器:可以自由的对感兴趣的广播进行注册,注册方式一般有两种:
动态注册:在代码里新建实例来进行注册。
先定义成员变量,再新建实例
intentFilter=new intentFilter(); intentFilter.addAction(“android.net.conn.CONNECTIVITY_CHANGE”); networkChangeReceiver=new NetWorkChangeReceiver(); registerReceiver(networkChangeReceiver,intentFilter);
别忘了注册完成后,在活动销毁时注销接收器释放系统资源!
protected void onDestroy(){ super.onDestroy(); unregisterReceiver(networkChangeReceiver); }
接收广播需要新建类并继承BroadcastReceiver重写onReceive方法
class NetworkChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context,Intent intent){ Toast.makeText(context,”network changes”,Toast.LENGTH_SHORT).show(); } }
通过onReceive方法接收到广播后打印消息
静态注册:在AndroidMainifest.xml里添加标签。
新建一个Receiver类继承BroadcastReceiver如下:
public class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context,Intent intent){ Toast.makeText(context,”Complete”,Toast.LENGTH_SHORT).show(); } }
<receiver android:name=”.MyReceiver”></receiver>静态注册
发送自定义广播:
发送前,要先定义个标签用来标示广播
<receiver android:name=”.MyBroadcastReceiver”> <intent-filter> <action android:name=”包名.MY_BROADCAST”/> </intent-filter> </receiver>
然后用Intent识别标签并发送广播:
Intent intent=new Intent(“包名.MY_BROADCAST”); sendBroadcast(intent);
此时发出的就是一条标准广播。然而发送有序广播的不同点就是在<intent-filter>
里加入权限级别<intent-filter android:priority=”100”>,priority表示接收广播的级别"2147483647"为最高优先级,这样优先级高的就会先收到广播,中断广播只需要调用abortBoradcast方法。
注意:
1.生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR(ApplicationNo Response) 程序无响应的错误信息,如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由Service来完成 . 这里不能使用子线程来解决 , 因为 BroadcastReceiver 的生命周期很短 , 子线程可能还没有结束BroadcastReceiver
就先结束了 .BroadcastReceiver 一旦结束 , 此时 BroadcastReceiver 的所在进程很容易在系统需要内存时被优先杀死 , 因为它属于空进程 ( 没有任何活动组件的进程 ). 如果它的宿主进程被杀死 , 那么正在工作的子线程也会被杀死 . 所以采用子线程来解决是不可靠的。
2. 动态注册广播接收器还有一个特点,就是注册的Activity关掉后,广播就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开的。系统常见广播Intent,如开机启动、电池电量变化、时间改变等广播。
------------------------------------------------------------------------------------------------------
好了,关于四大组件——BroadcastReceiver所涉及的各个方面基本都解释到了,如果还有不全面或是解释有误的点,欢迎广大看官给予点评和建议,本人必定细心查看,纠察改错。
敬请关注下一篇连载:四大组件——Service!
相关文章推荐
- Android Studio 常用快捷方法(持续更新)
- Android 混淆代码总结 和 Android APK反编译(最新更新)
- android-----Volley框架源码分析
- Android studio -SVN 使用笔记
- 各大Android开发群问题总结及解决
- Android从按下开机键到启动发生了什么
- [Android]如何获取当前用户设置的时区
- Fragment之初级
- Android SD卡路径问题
- 单独编译Android源代码中的模块
- Android提高第三篇之SurfaceView与多线程的混搭
- Android Studio SVN配置忽略文件
- Android百度地图开发(一)之初体验
- LeakCanary: 让内存泄露无所遁形
- 在Android Studio中使用Android Tests(Junit)
- 深入Android MediaPlayer的使用方法详解
- android动画之逐帧动画
- 使用TabLayout、ViewPager和Fragment实现顶部菜单可滑动切换
- Android 对话框封装(确认/取消 )
- 关于Android xml 绘图