skip MediaController callbacks if it's been unregistered
This gives slightly better gaurantees around when an app will receive a callback. As long as they remove a callback on the same thread calls get posted on they won't receive any callbacks after the remove. bug:18104724 Change-Id: Id9878186f005bf0b35c0380cd35f8fd7e67d1d90
This commit is contained in:
@@ -449,6 +449,7 @@ public final class MediaController {
|
||||
}
|
||||
MessageHandler holder = new MessageHandler(handler.getLooper(), cb);
|
||||
mCallbacks.add(holder);
|
||||
holder.mRegistered = true;
|
||||
|
||||
if (!mCbRegistered) {
|
||||
try {
|
||||
@@ -467,6 +468,7 @@ public final class MediaController {
|
||||
if (cb == handler.mCallback) {
|
||||
mCallbacks.remove(i);
|
||||
success = true;
|
||||
handler.mRegistered = false;
|
||||
}
|
||||
}
|
||||
if (mCbRegistered && mCallbacks.size() == 0) {
|
||||
@@ -956,6 +958,7 @@ public final class MediaController {
|
||||
|
||||
private final static class MessageHandler extends Handler {
|
||||
private final MediaController.Callback mCallback;
|
||||
private boolean mRegistered = false;
|
||||
|
||||
public MessageHandler(Looper looper, MediaController.Callback cb) {
|
||||
super(looper, null, true);
|
||||
@@ -964,6 +967,9 @@ public final class MediaController {
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
if (!mRegistered) {
|
||||
return;
|
||||
}
|
||||
switch (msg.what) {
|
||||
case MSG_EVENT:
|
||||
mCallback.onSessionEvent((String) msg.obj, msg.getData());
|
||||
|
||||
Reference in New Issue
Block a user