android注销广播
⑴ android开发 service 和activity 广播问题
这里我们先假定service发出内容时候的Action为ActionS。
如果activity里没有动态注册监听service发出的ActionS的广播, 即使Activity当前在使用中也不会得到通知, 更不用说未启动的Activity来捕获这个通知了。
要捕获这个字符串有两种方式, 分别如下
在AndroidManifest.xml中注册
<receiver android:name="YourBroadcastReceiver" >
<intent-filter>
<action android:name="ActionS" />
</intent-filter>
</receiver>
这样, 一旦有定义的ActionS发出来,YourBroadcastReceiver的onReceive方法就会回调了,这样的监听,不需要你的app已经在运行。你在onReceive方法里拦截处理。
2.在Activity中动态创建监听器, onCreate()中生成一个IntentFilter对象
IntentFilter filter=new IntentFilter();
//为IntentFilter添加一个ActionS
filter.addAction(ActionS);
yourBroadcastReceiver = newYourBroadcastReceiver();
registerReceiver(yourBroadcastReceiver, filter);
在onDestroy的时候去注册
unregisterReceiver(yourBroadcastReceiver);
这样的方式只有在Activity生命周期onCreate()-onDestroy()之间有效, 在YourBroadcastReceiver.onReceive()方法里拦截处理。
⑵ 注册广播有几种方式,这些方式有何优缺点请谈谈Android引入广播机制的用意。
android中,不同进程之间传递信息要用到广播,可以有两种方式来实现。
第一种方式:在Manifest.xml中注册广播,是一种比较推荐的方法,因为它不需要手动注销广播(如果广播未注销,程序退出时可能会出错)。
具体实现在Manifest的application中添加:上面两个android:name分别是广播名和广播的动作(这里的动作是表示系统启动完成),如果要自己发送一个广播,在代码中为:
Intent i = new Intent(“android.intent.action.BOOT_COMPLETED”);
sendBroadcast(i);
这样,广播就发出去了,然后是接收。
接收可以新建一个类,继承至BroadcastReceiver,也可以建一个BroadcastReceiver的实例,然后得写onReceive方法,实现如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(“android.intent.action.BOOT_COMPLETED”)) {
//Do something
}
}
};
第二种方式,直接在代码中实现,但需要手动注册注销,实现如下:
IntentFilter filter = new IntentFilter();
filter.addAction(“android.intent.action.BOOT_COMPLETED”);
registerReceiver(mEvtReceiver, filter); //这时注册了一个recevier ,名为mEvtReceiver,然后同样用上面的方法以重写onReceiver,
最后在程序的onDestroy中要注销广播,实现如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}
⑶ 求助 关于Android广播如何全局监听
这个是onCreate里面的代码
// 注册接收新消息的监听广播
msgReceiver = new NewMessageBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(EMChatManager
.getInstance().getNewMessageBroadcastAction());
intentFilter.setPriority(3);
registerReceiver(msgReceiver, intentFilter);
下面是自己写的广播里的操作
private class NewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 注销广播
abortBroadcast();
// 消息id(每条消息都会生成唯一的一个id,目前是SDK生成)
String msgId = intent.getStringExtra("msgid");
EMMessage message = EMChatManager.getInstance().getMessage(msgId);
String news = ((TextMessageBody) message.getBody()).getMessage();
// 发送人id
String userId = intent.getStringExtra("from");
username = userId;
Info info = new Info();
info.setText(news);
info.setId(msgId);
info.setUserid(userId);
list.add(info);
}
}
⑷ 12、注册广播有几种方式,这些方式有何优缺点请谈谈Android引入广播机制的用意。
注册广播的分类:静态注册和动态注册。
静态注册:在清单文件里直接注册,从app开启到app销毁,一直在接收广播,接收广播时间长,但是接收广播的优先级低于动态注册广播。
动态注册:动态注册,动态销毁,从onCreate到取消注册,期间接收广播,接收广播时间是短且可控,接收广播的优先级高。例如:
发送广播:
Intent i = new Intent();
i.setAction("ACTION_CLOSE");
sendBroadcast(i);
接受广播:
onCreate(){
//注册广播的接受者
IntentFilter filter = new IntentFilter();
filter.addAction("ACTION_CLOSE_ACTIVITY");
receiver = new InnerReceiver();
registerReceiver(receiver, filter);
}
private class InnerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//TODO 当前Activity接收到广播 需要做的事情
}
}
}
//注销广播
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
2.引入广播的原因:
a) 不同的app之间传信通用
b)发出一条指定,需要多个Activity都需要有反应
注意:以上仅供参考,如有疑问,请追问,谢谢。
⑸ Android 第六讲 广播接收器和服务
两种方式:静态注册和动态注册
动态注册:
1)动态注册:需要定义一个继承自BroadcastReceiver类的子类,该接收器需要在Activity中的onDestroy中注销
2)静态注册:通过在AndroidManifest.xml中配置
两种广播形式:有序广播和无序广播
1)无序广播:接受标准广播的接收器将同时收到广播消息,异步执行,没有先后顺序 sendBroadCast
2)有序广播:sendOrderedBroadCast,按照一定顺序先后被接受顺序,由priority属性决定,abortBroadCast中断广播
如果只想在本应用中发送和接受广播,使用LocalBroadcastReceiver来对广播进行管理
本地广播不支持静态注册
优点 :安全高效
Service是Android中的一种组件,和Activity的级别一致,但不能自己运行,只能后台运行,和其他组件交互,服务必须注册才能使用
本地服务:服务依附在主线程中,节约资源,主线程死掉服务终止
远程服务:服务在独立进程中,灵活性好 ,占用资源高
两种服务的启动模式:
1)start方式:调用者和服务之间没有关联,调用者退出不会影响服务,startService启动服务,如果服务不存在,调用onCreat方法,然后onStartCommand被调用。stopService关闭服务,onDestroy方法被调用
2)bind方式:调用者和服务绑定,调用者退出,服务终止bindService启动服务,onCreate方法创建服务,onBind方法绑定服务,onUnbind方法解绑,onDestory在服务结束时调用