加上这篇介绍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中注销广播:

@Overrideprotected void onResume() {super.onResume();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(MY_ACTION);//动态注册广播registerReceiver(receiver, intentFilter);}@Overrideprotected 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分的下载小费,没分的同学可以想办法获取积分,好的社区需要大家一同建设,杜绝伸手党!


加入我们的QQ群或微信公众账号请查看: Ryan's zone公众账号及QQ群


觉得文章对你有用,点击右下角的转发按钮分享给更多人!

同时欢迎关注我的新浪微博和我交流:@唐韧_Ryan



更多相关文章

  1. AlarmManager+Notification实现定时通知提醒功能
  2. Android:在AndroidManifest中注册BroadcastReceiver的权限问题
  3. Android(安卓)官方推荐 : DialogFragment 创建对话框
  4. Android(安卓)dialog用法(二)
  5. Android复习笔记(6) -BrodCastReceiver (广播接收者
  6. Android在开发中的实用技巧之DialogFragment和AlertDialog(v7包)
  7. Android(安卓)BroadcastReceiver基础详解一
  8. BroadCast广播实例
  9. 17. android dialog —— 单选列表对话框

随机推荐

  1. 高手帮你学规范!iOS和Android规范解析之提
  2. Google 停止支持 CDMA 设备
  3. Android入门之Style与Theme用法实例解析
  4. 彻底解决android读取中文txt,lrc的乱码(自
  5. Rect、RectF矩形类
  6. ArcGIS for Android示例解析之地图基础--
  7. 当Android遇见HTTP缓存代理服务器
  8. Android(安卓)可拖动的进度条:SeekBar之简
  9. Android数据读取之Sqlite数据库操作
  10. 彻底弄懂Activity的启动模式和任务栈