【发布时间】:2011-06-18 19:05:24
【问题描述】:
我知道 BroadcastReceiver 如果定义为 Activity 的内部类,则不能使用。但我想知道为什么?是因为系统必须实例化一个大的Activity 对象才能实例化一个接收器实例吗?
【问题讨论】:
标签: android broadcastreceiver inner-classes
我知道 BroadcastReceiver 如果定义为 Activity 的内部类,则不能使用。但我想知道为什么?是因为系统必须实例化一个大的Activity 对象才能实例化一个接收器实例吗?
【问题讨论】:
标签: android broadcastreceiver inner-classes
...因为系统必须实例化一个大型 Activity 对象才能实例化一个接收器实例?
是的,就像任何其他非静态内部类一样。在创建(非静态)内部类的实例之前,它必须从某处(例如通过实例化或通过其他机制)获取外部类的实例。
从系统自动实例化的清单文件中的意图调用的全局广播接收器没有此类外部实例可用于创建广播接收器非静态内部类的实例。这与外部类是什么无关,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);
}
...
}
【讨论】: