Vla*_*nov 13 android inner-classes broadcastreceiver
我知道BroadcastReceiver
如果定义为Activity的内部类,则无法使用.但我想知道为什么?是因为系统必须实例化一个大Activity
对象才能实例化一个接收器实例?
Ber*_*t F 27
...因为系统必须实例化一个大的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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18749 次 |
最近记录: |