我应该在哪里初始化监听器?

Where should I initialize a listener?

目前我从 activity(在它的 onCreate() 方法中)初始化一个侦听器(扩展 PhoneStateListener)。

private static boolean listening = false;

@Override
protected void onCreate(Bundle savedInstanceState) {

    //...

    if (!listening) {
        MyPhoneStateListener phoneListener = new MyPhoneStateListener(getApplicationContext());
        TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
        telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

        listening = true;
    }

但是,我意识到我也应该在设备重新启动时初始化该侦听器,所以我也应该从启动完成后启动它 BroadcastReceiver

然后如何避免该侦听器有两个实例 运行? (另外我想知道,如果 activity 不是 运行(应用程序在后台?切换 activity?),我的听众会一直工作吗?)

您可以创建一个 Class ListenerUtil,在其中为您的侦听器添加一个静态变量,然后您可以在 activity 和 BroadcastReceiver.Finally 中访问该静态变量,如果您的 activity 没有被破坏你的听众将永远工作。