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; + } + } + } } /** |