android.os.IBinder#DeathRecipient ( )源码实例Demo

下面列出了android.os.IBinder#DeathRecipient ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: TelePlus-Android   文件: CustomTabsService.java
@Override
public boolean newSession(ICustomTabsCallback callback) {
    final CustomTabsSessionToken sessionToken = new CustomTabsSessionToken(callback);
    try {
        DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
            @Override
            public void binderDied() {
                cleanUpSession(sessionToken);
            }
        };
        synchronized (mDeathRecipientMap) {
            callback.asBinder().linkToDeath(deathRecipient, 0);
            mDeathRecipientMap.put(callback.asBinder(), deathRecipient);
        }
        return CustomTabsService.this.newSession(sessionToken);
    } catch (RemoteException e) {
        return false;
    }
}
 
源代码2 项目: TelePlus-Android   文件: CustomTabsService.java
@Override
public boolean newSession(ICustomTabsCallback callback) {
    final CustomTabsSessionToken sessionToken = new CustomTabsSessionToken(callback);
    try {
        DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
            @Override
            public void binderDied() {
                cleanUpSession(sessionToken);
            }
        };
        synchronized (mDeathRecipientMap) {
            callback.asBinder().linkToDeath(deathRecipient, 0);
            mDeathRecipientMap.put(callback.asBinder(), deathRecipient);
        }
        return CustomTabsService.this.newSession(sessionToken);
    } catch (RemoteException e) {
        return false;
    }
}
 
源代码3 项目: AndroidChromium   文件: CustomTabsService.java
@Override
public boolean newSession(ICustomTabsCallback callback) {
    final CustomTabsSessionToken sessionToken = new CustomTabsSessionToken(callback);
    try {
        DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
            @Override
            public void binderDied() {
                cleanUpSession(sessionToken);
            }
        };
        synchronized (mDeathRecipientMap) {
            callback.asBinder().linkToDeath(deathRecipient, 0);
            mDeathRecipientMap.put(callback.asBinder(), deathRecipient);
        }
        return CustomTabsService.this.newSession(sessionToken);
    } catch (RemoteException e) {
        return false;
    }
}
 
源代码4 项目: 365browser   文件: CustomTabsService.java
@Override
public boolean newSession(ICustomTabsCallback callback) {
    final CustomTabsSessionToken sessionToken = new CustomTabsSessionToken(callback);
    try {
        DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
            @Override
            public void binderDied() {
                cleanUpSession(sessionToken);
            }
        };
        synchronized (mDeathRecipientMap) {
            callback.asBinder().linkToDeath(deathRecipient, 0);
            mDeathRecipientMap.put(callback.asBinder(), deathRecipient);
        }
        return CustomTabsService.this.newSession(sessionToken);
    } catch (RemoteException e) {
        return false;
    }
}
 
源代码5 项目: Telegram-FOSS   文件: CustomTabsService.java
@Override
public boolean newSession(ICustomTabsCallback callback) {
    final CustomTabsSessionToken sessionToken = new CustomTabsSessionToken(callback);
    try {
        DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
            @Override
            public void binderDied() {
                cleanUpSession(sessionToken);
            }
        };
        synchronized (mDeathRecipientMap) {
            callback.asBinder().linkToDeath(deathRecipient, 0);
            mDeathRecipientMap.put(callback.asBinder(), deathRecipient);
        }
        return CustomTabsService.this.newSession(sessionToken);
    } catch (RemoteException e) {
        return false;
    }
}
 
源代码6 项目: Telegram   文件: CustomTabsService.java
@Override
public boolean newSession(ICustomTabsCallback callback) {
    final CustomTabsSessionToken sessionToken = new CustomTabsSessionToken(callback);
    try {
        DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
            @Override
            public void binderDied() {
                cleanUpSession(sessionToken);
            }
        };
        synchronized (mDeathRecipientMap) {
            callback.asBinder().linkToDeath(deathRecipient, 0);
            mDeathRecipientMap.put(callback.asBinder(), deathRecipient);
        }
        return CustomTabsService.this.newSession(sessionToken);
    } catch (RemoteException e) {
        return false;
    }
}
 
public MediaProjectionManagerService(Context context) {
    super(context);
    mContext = context;
    mDeathEaters = new ArrayMap<IBinder, IBinder.DeathRecipient>();
    mCallbackDelegate = new CallbackDelegate();
    mAppOps = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
    mMediaRouter = (MediaRouter) mContext.getSystemService(Context.MEDIA_ROUTER_SERVICE);
    mMediaRouterCallback = new MediaRouterCallback();
    Watchdog.getInstance().addMonitor(this);
}
 
private void addCallback(final IMediaProjectionWatcherCallback callback) {
    IBinder.DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
        @Override
        public void binderDied() {
            removeCallback(callback);
        }
    };
    synchronized (mLock) {
        mCallbackDelegate.add(callback);
        linkDeathRecipientLocked(callback, deathRecipient);
    }
}
 
private void linkDeathRecipientLocked(IMediaProjectionWatcherCallback callback,
        IBinder.DeathRecipient deathRecipient) {
    try {
        final IBinder token = callback.asBinder();
        token.linkToDeath(deathRecipient, 0);
        mDeathEaters.put(token, deathRecipient);
    } catch (RemoteException e) {
        Slog.e(TAG, "Unable to link to death for media projection monitoring callback", e);
    }
}
 
private void unlinkDeathRecipientLocked(IMediaProjectionWatcherCallback callback) {
    final IBinder token = callback.asBinder();
    IBinder.DeathRecipient deathRecipient = mDeathEaters.remove(token);
    if (deathRecipient != null) {
        token.unlinkToDeath(deathRecipient, 0);
    }
}
 
@Override // Binder call
public void start(final IMediaProjectionCallback callback) {
    if (callback == null) {
        throw new IllegalArgumentException("callback must not be null");
    }
    synchronized (mLock) {
        if (isValidMediaProjection(asBinder())) {
            throw new IllegalStateException(
                    "Cannot start already started MediaProjection");
        }
        mCallback = callback;
        registerCallback(mCallback);
        try {
            mToken = callback.asBinder();
            mDeathEater = new IBinder.DeathRecipient() {
                @Override
                public void binderDied() {
                    mCallbackDelegate.remove(callback);
                    stop();
                }
            };
            mToken.linkToDeath(mDeathEater, 0);
        } catch (RemoteException e) {
            Slog.w(TAG,
                    "MediaProjectionCallbacks must be valid, aborting MediaProjection", e);
            return;
        }
        startProjectionLocked(this);
    }
}
 
源代码12 项目: container   文件: ServiceManagerNative.java
private static void linkBinderDied(final IBinder binder) {
	IBinder.DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
		@Override
		public void binderDied() {
			binder.unlinkToDeath(this, 0);
		}
	};
	try {
		binder.linkToDeath(deathRecipient, 0);
	} catch (RemoteException e) {
		e.printStackTrace();
	}
}
 
源代码13 项目: DroidService   文件: ServiceItem.java
ServiceItem(String name, IBinder binder, Intent intent, IBinder.DeathRecipient recipient, String callingPackage, int callingPid, int callingUid) {
    this.name = name;
    this.callingPid = callingPid;
    this.callingUid = callingUid;
    this.binder = binder;
    this.intent = intent;
    this.recipient = recipient;
}
 
源代码14 项目: android-test   文件: SpeakEasyTest.java
@Override
public void linkToDeath(IBinder.DeathRecipient death, int flags) {
  if (dead) {
    throw new RuntimeException("I daed");
  }
  this.death = death;
}
 
public void unlinkToDeath(IBinder.DeathRecipient recipient, int flags) {
    if (mRemoteDevice.asBinder() != null) {
        mRemoteDevice.asBinder().unlinkToDeath(recipient, flags);
    }
}
 
源代码16 项目: android-test   文件: SpeakEasy.java
Holder(IBinder binder, IBinder.DeathRecipient death) {
  this.binder = binder;
  this.death = death;
}