android开发 service 和activity 广播问题

android开发 service 和activity 广播问题


侃侃无极
浏览 903回答 2
2回答

潇潇雨雨

这里我们先假定service发出内容时候的Action为ActionS。如果activity里没有动态注册监听service发出的ActionS的广播, 即使Activity当前在使用中也不会得到通知, 更不用说未启动的Activity来捕获这个通知了。要捕获这个字符串有两种方式, 分别如下在AndroidManifest.xml中注册<receiver android:name="YourBroadcastReceiver" >&nbsp; &nbsp;<intent-filter>&nbsp; &nbsp; &nbsp; &nbsp;<action android:name="ActionS" />&nbsp; &nbsp;</intent-filter></receiver>这样, 一旦有定义的ActionS发出来,&nbsp;YourBroadcastReceiver的onReceive方法就会回调了,这样的监听,不需要你的app已经在运行。你在onReceive方法里拦截处理。&nbsp;2.在Activity中动态创建监听器, onCreate()中生成一个IntentFilter对象&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IntentFilter filter=new IntentFilter();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//为IntentFilter添加一个ActionS&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;filter.addAction(ActionS);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yourBroadcastReceiver = new&nbsp;YourBroadcastReceiver();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; registerReceiver(yourBroadcastReceiver, filter);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在onDestroy的时候去注册&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;unregisterReceiver(yourBroadcastReceiver);这样的方式只有在Activity生命周期onCreate()-onDestroy()之间有效, 在YourBroadcastReceiver.onReceive()方法里拦截处理。

跃然一笑

广播的周期很短,你不能在广播内做耗时操作,而服务却能。广播的作用是帮你传递一些通知,例如你写了一个开机广播,一旦手机开机,广播就发一则通知告诉手机(你写的程序),手机(你写的程序,某个类,某句代码)启动服务,这个时候在服务里面可以做你想做的耗时操作,例如去请求服务器,加载数据。广播和服务的区别就是广播周期短,不能做耗时操作,服务是长时间连接,可以做耗时操作,例如用服务控制音乐的播放等。广播需要注册,有两种方式,一个在配置文件里面,一个是代码注册、服务是写一个类继承服务,然后在里面写你的操作,外围实例化服务,去启动服务。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android