我应该在哪里初始化监听器?
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 没有被破坏你的听众将永远工作。
目前我从 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 没有被破坏你的听众将永远工作。