BroadcastReceiver作为内部类

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)

  • bert是否通过保持外部类对象导致任何内存泄漏? (3认同)