加上这篇介绍Android广播的,我的BLOG中就对Android中四大组件Activity、BroadcastReceiver、ContentProvider、Service都做了介绍,感兴趣的同学可以翻阅我之前的博客对这些内容进行了解。今天主要介绍Android中广播(BroadcastReceiver)的基本使用,同时附上一个Demo,Demo覆盖除了ContentProvider之外其他三个组件的综合使用场景。在这篇文章中,你可以了解到:
1.广播是什么、干嘛用的、如何用;
2.如何结合Service以及Activity配合BroadcastReceiver使用,以及注意事项;
3.如何使用Dialog风格的Activity;
OK,下面描述一个功能需求进入我们的主题:
需求:后台运行一个服务在监听是否有新消息到来,如果有新消息,则不管当前用户界面处于系统中哪个地方,都需要弹出一个对话框来提示用户有新消息,并且用户点击对话框后要求进入指定的处理界面。
实现上面这个功能需求,需要用到Service、BroadcastReceiver、Dialog风格的Activity。Service用来在后台检测是否有新消息,如果检测到,则广播一则消息,广播接受者接收到以后对消息进行处理并弹出对话框,具体流程就是这样。
这里有一点需要注意的是,耗时的操作不能放在BroadcastReceiver的onReceive方法里面,如果在该方法里面处理的时间超过10秒,系统就会报出异常,如果有耗时操作应该放在Service的新开线程里面执行,另外,Service是和Activity同级别的,只是它没有可见界面,也就是说,如果在Service里面有耗时操作也应该开启新的线程来处理,不要把Service理解成是一个后台线程。
广播的两种注册方式:
1.静态注册
静态注册是指在Mainifest中配置注册广播,通过静态方式注册的广播生命周期贯穿于整个应用程序,即使当前应用程序没有运行,如果接收到了广播消息,该应用程序也可以被启动,静态注册方式不依赖于其他组件。
<receiver android:name=".MainBroadcastReceiver">
<intent-filter>
<action android:name="com.ryantang.receiver"/>
</intent-filter>
</receiver>
其中的action就是触发广播的动作名。
2.动态注册
动态注册是指改广播在依附的Activity或其他组件进行注册,通常在代码中通过registerReceiver方法注册,动态注册的广播声明周期与所在的组件(Activity)一样,如果当前Activity被finish了,则广播也随之失效了 。在Activity的onResume中注册广播,在onStop中注销广播:
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MY_ACTION);
//动态注册广播
registerReceiver(receiver, intentFilter);
}
@Override
protected void onStop() {
super.onStop();
//注销广播
unregisterReceiver(receiver);
}
另外还有一个知识点就是使用Dialog风格的Activity,效果和使用AlertDialog一样,但是环境不一样,传统的AlertDialog必须在其父窗口,通常是在某一个Activity中使用,而Dialog风格的Activity不受这个限制,之所以要说明这个,是因为结合之前将的需求,要使系统收到新的信息后在任何界面弹出对话框,那就只能在广播的onReceive方法中弹出对话框,就只能使用Dialog风格的Activity。使用方法只需在一般的Activity配置中加上一句属性即可:
<activity
android:name=".DilaogActivity"
android:theme="@android:style/Theme.Dialog" />
以上是介绍了一些基本知识和本Demo解决的问题,具体代码请下载Demo源码查看,同时附上Demo的界面截图:
Demo源码下载地址:点击下载
作为辛苦劳动成果,设置了1分的下载小费,没分的同学可以想办法获取积分,好的社区需要大家一同建设,杜绝伸手党!
加入我们的或微信公众账号请查看:Ryan's
zone公众账号及
觉得文章对你有用,点击右下角的转发按钮分享给更多人!
同时欢迎关注我的新浪微博和我交流:@唐韧_Ryan
分享到:
相关推荐
启动后台service后,service内跑一个线程,5秒后发送一个广播给系统,Activity接收到该广播后显示service发送的信息。本例主要是实现后台service与前activity的交互
知识点:广播必须在activity或者service启动之后才能发挥作用。个人看来是因为开启activity或者service时, AndroidManifest.xml里面的注册的广播或者在Activity、service动态注册的广播接收器才能被开启,这样才能...
通过service发送广播通知activity修改UI的内容,源代码,希望对你有所帮助
详解三大组件的综合使用,广播的静态注册与动态注册,如何结合Service使用广播等
安卓开发观察者模式应用-一个service通知多个activity更新ui的实现, service与activity的交互: 1.接口回调 2.自定义广播 3.观察者模式
在Android开发中很少有activity service broadcast 单例的综合使用,我写的这个例子已经能运行了希望能和大家交流学习
android中利用service和广播实现多个activity共享计时器 需要在activityA中开始计时,然后在activityB和activityC中操作,并且需要在Activity A、B、C中都要看到计时器
在Activity中时不能直接调用服务(Service)中的方法的。如果需要调用服务中的方法,可以考虑通过发送广播的形式,调用服务中的方法。
Android Activity、Service、Broadcast、Notification四合一例子,Activity中点击按钮启动服务,服务里每4秒发送一次广播,广播接受者每接受到一个发送一条通知。
Android:Intent页面跳转,Activity生命周期,Service服务,广播代码实例
在Android平台,如何使用AlarmManager启动广播BroeadReceiver 、服务Service 、页面Activity。
Android部分之Service篇
非常全面的demo , 保证能满足您的需求!包含广播 ,service , activity 的调用!
android 后台服务定时更新前台Activity Ui 通过广播
第8章 Android广播事件处理 Broadcast Receiver Android 广播事件处理 Broadcast Receiver,讲述了广播事件处理机制、Notification、NotificationManager和AlarmManager的使用 第9章 Android中的数据存取 Android...
本文为大家分享了android service计时功能的具体代码,供大家参考,具体内容如下 源码下载地址:https://github.com/luoye123/Timing 1、首先建立主页面的设计:activity_time.xml <?xml version=1.0 encoding=...
下面通过2个简单的例子来学会怎样在andorid中使用广播信息,其实在文章Android开发历程_13(Service的使用)中已经使用过广播机制,即在servier下发送广播信息,主activity中接收该信息来更新UI。在那个程序中使用的是...
通过动态注册广播,实现activity和service的交互。activityUI的文本可以显示service里的值
实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将...这里提到的共享文件指的是Activity和Service使用同一个文件来达到