- Broadcast Receiver:接听用户程序或系统程序所发出的broadcast intent,属于系统级别的监听器,拥有自己的进程,可以使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息,在应用程序中实现Broadcast Receiver来监听和响应这些广播的Intent。匹配Intent的BroadcastReceiver都可能被启动
- 事件广播要构建Intent然后调用sendBroadcast()方法将广播发出,事件的接收是通过定义一个继承BroadcastReceiver的类来实现的,继承该类后覆盖起onReceiver(Context,Intent)方法,在该方法中响应事件,如果该方法10秒内没有完成,系统会认为程序无响应,该方法执行完BroadcastReceiver实例就会被销毁,Android系统中定义了很多标准的Broadcast Action来响应系统广播事件
- 广播接收器既可以在AndroidManifest中注册也可以通过代码方式来注册,一般我们是在Activity.onResume()方法中使用Context.registerReceiver(BroadcastReceiver,IntentFilter)方法来注册一个广播接收器(IntentFilter.setPriority可以设置receiver的优先级),在Activity.onPause中使用unregisterReceiver方法来注销一个广播接收器
- 两种注册广播方式的区别:
- 动态注册的广播永远要快于静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低
- 动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。
- 静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
- 由于BroadcastReceiver是一种全局监听器,因此可以利用来进行不同组件的通信,通过在组件中定义内部BroadcastReceiver类,接收其他组件的广播信息
- 发送广播:Context.sendBroadcast(Intent)会启动Intent参数对应的BroadcastReceiver Notification和NotificationManager用来实现可视化的信息显示
- Broadcast被分为两种:
- 普通广播:完全异步,可以再同一时刻(逻辑上)被所有接受者收到,传递效率高,但是接受者不能把处理结果返回给下一个接受者,而且无法终止Broadcast intent的传播。sendBoardcast()发送普通广播
- 有序广播:接收者将按照预先声明的优先级依次调用onReceiver()方法接收Broadcast,优先级声明在<intent-filter>元素的android:priority属性中或者调用IntentFilter.setPriority进行设置,数值越大优先级越高,有序广播可以调用abortBroadcast()终止intent的传播,也可以把自己的数据通过setResultExtras(Bundle)方法传给下一个接受者,sendOrderedBroadcast()发送有序广播
- AlarmManager:用来实现闹钟,提供了一种系统级的提示服务,允许安排在将来的某个时间执行一个服务
- AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE);