diff options
| -rw-r--r-- | core/java/android/os/storage/StorageManager.java | 23 | 
1 files changed, 19 insertions, 4 deletions
| diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index cb6c1dc4cf97..8a20a6ea863d 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -56,7 +56,7 @@ public class StorageManager      /*       * Our internal MountService binder reference       */ -    private IMountService mMountService; +    final private IMountService mMountService;      /*       * The looper target for callbacks @@ -304,8 +304,6 @@ public class StorageManager              return;          }          mTgtLooper = tgtLooper; -        mBinderListener = new MountServiceBinderListener(); -        mMountService.registerListener(mBinderListener);      } @@ -322,6 +320,15 @@ public class StorageManager          }          synchronized (mListeners) { +            if (mBinderListener == null ) { +                try { +                    mBinderListener = new MountServiceBinderListener(); +                    mMountService.registerListener(mBinderListener); +                } catch (RemoteException rex) { +                    Log.e(TAG, "Register mBinderListener failed"); +                    return; +                } +            }              mListeners.add(new ListenerDelegate(listener));          }      } @@ -347,7 +354,15 @@ public class StorageManager                      break;                  }              } -        } +            if (mListeners.size() == 0 && mBinderListener != null) { +                try { +                    mMountService.unregisterListener(mBinderListener); +                } catch (RemoteException rex) { +                    Log.e(TAG, "Unregister mBinderListener failed"); +                    return; +                } +            } +       }      }      /** |