Android广播机制,BroadcastReceiver
来源:互联网 发布:维普中文期刊数据库 编辑:程序博客网 时间:2024/05/22 22:51
广播机制,本质上是一种组件间的通信方式,如果是两个组件位于不同的进程当中,也可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式就更多了,这样看来,广播机制似乎是多余的。然而,广播机制却是不可替代的,它和Binder机制不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。
广播负责发出信号,需要用四大组件之一的BroadcastReceiver广播接收器接收信号。一般四大组件都要注册在清单文件中,而广播可以在在代码中注册先看注册方式;
注册广播接收器
静态广播和动态广播的区别
1生存期,静态广播的生存期可以比动态广播的长很多,因为静态广播很多都是用来对系统时间进行监听,比如我们可以监听手机开机。而动态广播会随着context的终止而终止
2优先级,动态广播的优先级比静态广播高
3静态广播比较耗费资源
静态注册(和在 AndroidManifest.xml 中注册)
<receiver android:name=".MyReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="MyAction" /> </intent-filter> </receiver>
动态注册(在代码中注册)
动态注册广播接收器可以自由地控制注册与注销。但必须先注册,再发送广播才能接收到广播。而静态注册可以让程序在未启动??的情况下就能接收到广播(现在不可以了)。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化广播接收器对象 reciever = new MyReceiver(); //构建一个意图过滤器IntentFilter IntentFilter filter = new IntentFilter(); //添加Action表明该广播接收器能接收什么类型的广播 filter.addAction("MyAction"); //注册广播接收器 registerReceiver(reciever,filter); //动态注册时,先注册,再发送广播 sendBroadcast(new Intent("MyAction")); } @Override protected void onDestroy() { super.onDestroy(); //解除注册 if(reciever != null) unregisterReceiver(reciever); }
广播接收器
public class MyReceiver extends BroadcastReceiver { public MyReceiver() { } @Override public void onReceive(Context context, Intent intent) { // TODO: 这个方法在广播接收器接收时被调用 // an Intent broadcast.// throw new UnsupportedOperationException("Not yet implemented"); System.out.print("程序已启动"); Toast.makeText(context,"程序已启动",Toast.LENGTH_SHORT).show(); }}
发送广播
Android中的广播主要可以分为两种类型,标准广播和有序广播。
标准广播(Normal broadcasts):标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎会在同一时刻接收到这条广播消息。这种广播效率比较高,但同时也意味着它是无法被截断的。
有序广播(Ordered broadcasts):有序广播则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递。
sendBroadcast(Intent var1); public abstract void sendBroadcast(Intent var1, String var2); public abstract void sendOrderedBroadcast(Intent var1, String var2); public abstract void sendOrderedBroadcast(Intent var1, String var2, BroadcastReceiver var3, Handler var4, int var5, String var6, Bundle var7);var2:接收权限 var3:指定必须收到的接收器 var4:消息处理器 var6:传入的字符串 var7:传入的bundle; public abstract void sendBroadcastAsUser(Intent var1, UserHandle var2); public abstract void sendBroadcastAsUser(Intent var1, UserHandle var2, String var3); public abstract void sendOrderedBroadcastAsUser(Intent var1, UserHandle var2, String var3, BroadcastReceiver var4, Handler var5, int var6, String var7, Bundle var8);
接受权限配置
<permission android:name="你自定义的权限名称" android:protectionLevel="normal"></permission>
终止广播abortBroadcast();
在广播接收器里调用abortBroadcast()阻止其他接受者接收,只适用于有序广播。
- Android广播机制(BroadcastReceiver)
- Android广播机制 BroadCastReceiver
- Android广播机制-BroadcastReceiver
- Android 广播机制 BroadCastReceiver
- Android -BroadcastReceiver广播机制
- android---broadcastReceiver广播机制
- Android广播机制,BroadcastReceiver
- Android广播接收机制(BroadcastReceiver)
- Android广播接收机制(BroadcastReceiver)
- Android广播接收机制(BroadcastReceiver)
- [Android随笔]BroadcastReceiver广播机制
- android广播机制BroadCastReceiver解析
- android 广播机制Broadcast、BroadcastReceiver用法解读
- Android学习之广播机制BroadcastReceiver
- Android 四大组件之一:BroadcastReceiver广播机制
- Android简单实现BroadCastReceiver广播机制
- Android --- 广播机制(BroadcastReceiver应用)
- BroadcastReceiver广播机制
- struts2.xml配置详解
- spring+myBatisi实现多数据源动态切换
- layer-------弹出层参数介绍
- 再谈java的内存泄露
- Hive SQL执行计划深度解析
- Android广播机制,BroadcastReceiver
- SwipeRefreshLayout 嵌套 ListView 滑动问题
- c中的const与c++中的const
- startManagedWebLogic <BEA-000365> <Server state changed to RUNNING.>
- latex中如何将表格的Table1改为表1
- 《舞步学院》教你聊天的新手课,不要再做一个沉默的暗恋者!
- Ubuntu16.04首次安装无法连网和将桌面左侧任务栏移到屏幕底部
- 生产车间管理使用ERP系统提高企业管理水平
- 比特币