Android 尽管从非UI线程从TelephonyManager注销,但仍调用了侦听器

Android 尽管从非UI线程从TelephonyManager注销,但仍调用了侦听器,android,telephonymanager,Android,Telephonymanager,我使用以下代码注册了一个PhoneStateListener: mTm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); mTm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE | PhoneStateListener.LISTEN_CELL_LOCATION

我使用以下代码注册了一个
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);
并使用以下代码将其注销:

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线程的同一线程中完成的

问题:

  • 如果电话状态已更改,且更改已“发布”到 侦听器,并且在调用该侦听器之前已将其注销, 监听器会被调用吗?还是“发布的消息”会被删除 从“队列”中删除

  • 注册和注销是否是从 非UI线程问题

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

    我用布尔运算解决了这个问题。这是一个丑陋的解决办法。希望谷歌能解决这个问题