我知道如果定义为Activity的内部类,则不能使用BroadcastReceiver
。但我想知道为什么?是因为系统必须实例化一个大的Activity
对象才能实例化一个接收器实例?
答案 0 :(得分:26)
...因为系统必须将一个大的Activity对象实例化为只是实例化一个接收实例?
Yup,就像任何其他非静态内部类一样。它必须从某个地方获取外部类的实例(例如通过实例化或通过其他机制),然后才能创建(非静态)内部类的实例。
从清单文件中的意图调用的全局广播接收器将被系统自动实例化,没有这样的外部实例用于创建广播接收器非静态内部类的实例。这与外部类是什么无关,是否与Activity无关。
但是,如果您使用接收器作为处理活动的一部分,您可以在活动中自己手动实例化广播接收器(而在其中一个活动回调中,您有一个外部类的实例可以使用: this
)然后根据需要注册/取消注册:
public class MyActivity extends Activity {
private BroadcastReceiver myBroadcastReceiver =
new BroadcastReceiver() {
@Override
public void onReceive(...) {
...
}
});
...
public void onResume() {
super.onResume();
....
registerReceiver(myBroadcastReceiver, intentFilter);
}
public void onPause() {
super.onPause();
...
unregisterReceiver(myBroadcastReceiver);
}
...
}