导航

转载:Android广播、Service、Activity综合使用

Posted on 2013-12-04 15:46  littledrop  阅读(209)  评论(0编辑  收藏  举报

转自:http://blog.csdn.net/ryantang03/article/details/8683921

分类: Android 1929人阅读 评论(4) 收藏 举报

加上这篇介绍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中配置注册广播,通过静态方式注册的广播生命周期贯穿于整个应用程序,即使当前应用程序没有运行,如果接收到了广播消息,该应用程序也可以被启动,静态注册方式不依赖于其他组件。

 

[html] view plaincopy
 
  1. <receiver android:name=".MainBroadcastReceiver">  
  2.             <intent-filter>  
  3.                 <action android:name="com.ryantang.receiver"/>  
  4.             </intent-filter>  
  5.         </receiver>  

其中的action就是触发广播的动作名。

 

 

2.动态注册

动态注册是指改广播在依附的Activity或其他组件进行注册,通常在代码中通过registerReceiver方法注册,动态注册的广播声明周期与所在的组件(Activity)一样,如果当前Activity被finish了,则广播也随之失效了 。在Activity的onResume中注册广播,在onStop中注销广播:

 

[java] view plaincopy
 
  1. @Override  
  2.     protected void onResume() {  
  3.         super.onResume();  
  4.         IntentFilter intentFilter = new IntentFilter();  
  5.         intentFilter.addAction(MY_ACTION);  
  6.         //动态注册广播  
  7.         registerReceiver(receiver, intentFilter);  
  8.     }  
  9.   
  10.     @Override  
  11.     protected void onStop() {  
  12.         super.onStop();  
  13.         //注销广播  
  14.         unregisterReceiver(receiver);  
  15.     }  

另外还有一个知识点就是使用Dialog风格的Activity,效果和使用AlertDialog一样,但是环境不一样,传统的AlertDialog必须在其父窗口,通常是在某一个Activity中使用,而Dialog风格的Activity不受这个限制,之所以要说明这个,是因为结合之前将的需求,要使系统收到新的信息后在任何界面弹出对话框,那就只能在广播的onReceive方法中弹出对话框,就只能使用Dialog风格的Activity。使用方法只需在一般的Activity配置中加上一句属性即可:

 

 

[html] view plaincopy
 
  1. <activity  
  2.             android:name=".DilaogActivity"  
  3.             android:theme="@android:style/Theme.Dialog" />  

以上是介绍了一些基本知识和本Demo解决的问题,具体代码请下载Demo源码查看,同时附上Demo的界面截图:

 

          

 

Demo源码下载地址:点击下载

 

 

作为辛苦劳动成果,设置了1分的下载小费,没分的同学可以想办法获取积分,好的社区需要大家一同建设,杜绝伸手党!

 

 

 

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

 

 

 

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

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