@@ -56,7 +56,7 @@ public class StorageManager
5656 /*
5757 * Our internal MountService binder reference
5858 */
59- private IMountService mMountService ;
59+ final private IMountService mMountService ;
6060
6161 /*
6262 * The looper target for callbacks
@@ -304,8 +304,6 @@ public StorageManager(Looper tgtLooper) throws RemoteException {
304304 return ;
305305 }
306306 mTgtLooper = tgtLooper ;
307- mBinderListener = new MountServiceBinderListener ();
308- mMountService .registerListener (mBinderListener );
309307 }
310308
311309
@@ -322,6 +320,15 @@ public void registerListener(StorageEventListener listener) {
322320 }
323321
324322 synchronized (mListeners ) {
323+ if (mBinderListener == null ) {
324+ try {
325+ mBinderListener = new MountServiceBinderListener ();
326+ mMountService .registerListener (mBinderListener );
327+ } catch (RemoteException rex ) {
328+ Log .e (TAG , "Register mBinderListener failed" );
329+ return ;
330+ }
331+ }
325332 mListeners .add (new ListenerDelegate (listener ));
326333 }
327334 }
@@ -347,7 +354,15 @@ public void unregisterListener(StorageEventListener listener) {
347354 break ;
348355 }
349356 }
350- }
357+ if (mListeners .size () == 0 && mBinderListener != null ) {
358+ try {
359+ mMountService .unregisterListener (mBinderListener );
360+ } catch (RemoteException rex ) {
361+ Log .e (TAG , "Unregister mBinderListener failed" );
362+ return ;
363+ }
364+ }
365+ }
351366 }
352367
353368 /**
0 commit comments