BroadcastReceiver作为内部类

时间:2011-01-31 18:53:56

标签: android broadcastreceiver inner-classes

我知道如果定义为Activity的内部类,则不能使用BroadcastReceiver。但我想知道为什么?是因为系统必须实例化一个大的Activity对象才能实例化一个接收器实例?

1 个答案:

答案 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);
    }
    ...
}