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ドキュメントに従って、リスナーは現在の値での登録時に呼び出されます。この最初の呼び出しの前にリスナーの登録が解除されても、リスナーはまだ呼び出されていることがわかりました。

ブール値を使用して問題を解決しました。これは醜い回避策です。Googleがこれを修正することを願っています。

于 2012-07-03T18:54:18.390 に答える