android broadcast 学习

广播注册介绍

android中的广播是android的四大组件之一,广播的注册主要有两种方式:静态注册动态注册,静态注册就是在AndroidManifest.xml文件中定于,动态注册就是通过Context.registerReceiver注册。
静态注册的广播在应用安装的时候,系统解析安装的apk里面的AndroidManifest.xml文件时自动注册,所以静态注册的广播在应用安装的时候就生效,静态注册的广播适合轻量级的,监听量不是特别巨大的,不然容易影响系统的运行效率。
动态注册的广播,只有运行了Context.registerReceiver的代码才完成注册,运行Context.unregisterReceiver或者其所在的实例被回收了就解除注册,动态注册的广播优先级高于静态注册的广播。

不能静态注册的广播

考虑到系统效率以及有序广播的影响,系统广播定义了部分广播的监听只能动态注册才有效,一方面提高系统效率,另一方面动态注册的广播优先级比静态广播的优先级高,部分有序广播容易被系统阻止向下传播,动态注册可以优先获取该广播。不能静态注册的部分广播包括:
android.intent.action.BATTERY_CHANGED
android.intent.action.CONFIGURATION_CHANGED
android.intent.action.TIME_TICK
android.intent.action.SCREEN_OFF
android.intent.action.SCREEN_ON
Intent.ACTION_CLOSE_SYSTEM_DIALOGS
其中Intent.ACTION_CLOSE_SYSTEM_DIALOGS可以通过注册它来监听Home按键消息。

1
2
3
4
5
6
7
8
9
10
11
String action = intent.getAction();
if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
String data = intent.getStringExtra("reason");
if ("homekey".equals(reason)) {
// 按下HOME健

} else if ("recentapps".equals(reason)) {
// 长按HOME键,广播会连续返回若干条recentapps广播

}
}

文章目录
  1. 1. 广播注册介绍
  2. 2. 不能静态注册的广播
,