Android四大组件之BroadcastReceiver

来源:互联网 发布:四十部网络禁书名单 编辑:程序博客网 时间:2024/05/29 04:26

       关于BroadcastReceiver,先引入一篇写的比较全面比较好点的文章:http://www.2cto.com/kf/201404/296055.html

不过其中开机自启动的源码稍微有点问题。大家用的时候注意一下,很容易发现问题的,action没有配好。

   

         按照惯例,基础知识我们还是看上边的文章即可,下边只对一些注意点做讲解。

         1.Android中BroadcastReceiver动态注册和静态注册有什么区别?

              比较明显的一点就是静态注册在程序没有启动的状态下就可以通过广播调用起来,而动态注册必须在register了之后才能监听到广播。

              所以实际使用中要注意选择,是用静态还是动态的。

        2.动态注册一般是在什么时候注册,什么时候取消注册?

            这里要注意动态注册的register和unregister必须是成对出现的。我们一般在onStart时register,在onStop时取消注册,当然也要看实际使用,如果我们在onStop中取消了注册,这样程序在后台状态下就没有办法接收到广播。而如果我们broadcast是用于ui更新之类的,如果我们不在onStop中取消注册,而是在onDestroy时取消注册,这个时候就会产生耗电问题,因为程序在后台一直监听这broadcast,进行着onReceived的处理,所以耗电是肯定的。所以在选择上尽量规避这种情况,采取其他方式做处理。比如在onResume时再获取一把数据。

        3.广播常用的场景                             

         广播分为系统广播和我们自定义广播。

        系统广播,比如手机启动的广播或者时间更新的广播,我们可以利用这些广播来完成程序的开机自启动。

        而什么时候我们需要自定义广播呢?我们经常碰到的处理场景就是不知道何时某段逻辑处理完了,要调起某个Service,或者某个Activity,亦或者是数据的更新,notification的弹出等,这种异步的操作,一般就可以考虑到广播。

         

         4,Broadcast和Handler的使用区分

        对于上面自定义广播这种场景,大家有时候会考虑到另外一种工具,Handler,handler也有异步处理的功效,那么我们如何选择是用handler来处理还是用broadcast?

         总体而言,handler相对轻量级。我们经常见到的使用是在同一个Activity中用全局变量保存来处理的,常见的处理是进行完网络请求后,发送消息给handler,handler来做对应的处理,更新ui。所以handler经常是用于线程见的通信的。而广播是可以跨进程的,比如我们可以通过发送broadcast来调起其他的应用。

         所以一般来说,我们能用handler的情况下处理就不需要用广播。当需要监听系统消息时或者类似于小米通信这种需要长时间监听的,才需要用到广播。


         


0 0
原创粉丝点击