2

PhoneStateListener我使用以下代码注册了一个:

mTm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
mTm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE
                | PhoneStateListener.LISTEN_CELL_LOCATION
                | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

并使用以下代码取消注册:

mTm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);

但在极少数情况下,即使在未注册之后也会调用侦听器。

重要提示:
注册和注销都是从不是 UI 线程的同一个线程完成的。

问题:

  1. 如果电话状态已更改并且更改已“发布”到侦听器并且侦听器在被调用之前未注册,那么侦听器是否仍会被调用?还是将“已发布的消息”从“队列”中删除?

  2. 注册和注销是从非 UI 线程完成的这一事实是否重要?

4

1 回答 1

3

根据API 文档,在注册时使用当前值调用侦听器。我发现当监听器在这个初始调用之前被注销时,它仍然被调用。

我通过使用布尔值解决了这个问题。这是一个丑陋的解决方法。希望谷歌能解决这个问题。

于 2012-07-03T18:54:18.390 回答