android四大组件——广播
至高准则1:Intent在四大组件中起"桥梁"作用
至高准则2:安卓四大组件运行在主线程中,所以不能在其中做耗时操作。
广播的作用:打开其他应用的某个活动或者组件、发送消息等。
广播里面不应该做任何的耗时操作,广播打开活动需要intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
一、发送广播
无序广播&有序广播
无序广播:①不可被终止 ②数据不可被修改
有序广播:①可以被终止 ②数据可以被修改 ③监听广播FianlReceiver可以监听到数据是否被修改。
1.发送无序广播:和开启Activity类似,用intent来setAction。
Intent intent = new Intent("包名 + 广播名");
sendBroadcast(intent);
2.发送有序广播:
Intent intent = new Intent("包名 + 广播名");
sendOrderedBroadcast(intent); //接受有序广播的Receiver可以在intent-filter中设置优先级,优先级高的可以abortBroadcast()打断广播
二、接受广播(重点:intent-filter)
静态广播:应用程序未启动也可接收广播
动态广播:应用程序必须启动才可以接收广播,需要动态的注册和注销。
1.静态接收广播(Manifest + Java代码)
①创建一个广播接收者(右键工程包new)
②在清单文件下的receiver下>intent-filter下>action的name下添加要接收的广播
③接收到广播后,在广播接收者的onReceive方法中执行操作。
2.动态接收广播(Java代码中实现)
①registerReceiver(receiver,intentfilter); //注册广播接收者需要两个参数
②new一个intentfilter,并添加action接收需要的广播
③创建一个类继承BroadcastReceiver(没有在清单文件中注册,而是代码动态注册!),实现onReceive()方法
④销毁活动时,记得注销广播接收者:unregisterReceiver(receiver);
三、本地广播机制
优点:只在应用程序内部传递,安全性高。
原理:发送和接收都额外经过LocalBroadcastManager来实现,且只能动态注册。
本地广播管理器:LocalBroadcastManager manager = LocalBroadcastManager.getInstance(this);
发送:manager.sendBroadcast(intent)
接收:manager.registerReceiver(receiver,intentfilter);//注册
manager.unregisterReceiver(receiver,intentfilter);//注销
四、系统广播一览(转自简书:https://www.jianshu.com/p/ca3d87a4cdf3)
其中,sd卡状态需要多配置一个data:“file”
软件安装卸载需要多配置一个data:“package”