public boolean newSession(ICustomTabsCallback callback) { final CustomTabsSessionToken sessionToken = new CustomTabsSessionToken(callback); try { DeathRecipient e = new DeathRecipient() { public void binderDied() { CustomTabsService.this.cleanUpSession(sessionToken); } }; synchronized (CustomTabsService.this.mDeathRecipientMap) { callback.asBinder().linkToDeath(e, 0); CustomTabsService.this.mDeathRecipientMap.put(callback.asBinder(), e); } return CustomTabsService.this.newSession(sessionToken); } catch (RemoteException var7) { return false; } }
@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; } }
/** * @param context * @return * @throws RemoteException */ public static final IPref getPref(Context context) throws RemoteException { if (sPref == null) { if (IPC.isPersistentProcess()) { // 需要枷锁否? initPref(); } else { IBinder b = PluginProviderStub.proxyFetchHostPref(context); b.linkToDeath(new DeathRecipient() { @Override public void binderDied() { sPref = null; } }, 0); sPref = IPref.Stub.asInterface(b); } } return sPref; }
@Override public boolean newSession(ICustomTabsCallback callback) { final CustomTabsSessionToken sessionToken = new CustomTabsSessionToken(callback); try { DeathRecipient deathRecipient = new 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; } }
protected boolean cleanUpSession(CustomTabsSessionToken sessionToken) { try { Map e = this.mDeathRecipientMap; synchronized (this.mDeathRecipientMap) { IBinder binder = sessionToken.getCallbackBinder(); DeathRecipient deathRecipient = this.mDeathRecipientMap.get(binder); binder.unlinkToDeath(deathRecipient, 0); this.mDeathRecipientMap.remove(binder); return true; } } catch (NoSuchElementException var7) { return false; } }
/** * Called when the client side {@link IBinder} for this {@link CustomTabsSessionToken} is dead. * Can also be used to clean up {@link DeathRecipient} instances allocated for the given token. * @param sessionToken The session token for which the {@link DeathRecipient} call has been * received. * @return Whether the clean up was successful. Multiple calls with two tokens holdings the * same binder will return false. */ protected boolean cleanUpSession(CustomTabsSessionToken sessionToken) { try { synchronized (mDeathRecipientMap) { IBinder binder = sessionToken.getCallbackBinder(); DeathRecipient deathRecipient = mDeathRecipientMap.get(binder); binder.unlinkToDeath(deathRecipient, 0); mDeathRecipientMap.remove(binder); } } catch (NoSuchElementException e) { return false; } return true; }
/** * Called when the client side {@link IBinder} for this {@link CustomTabsSessionToken} is dead. * Can also be used to clean up {@link DeathRecipient} instances allocated for the given token. * * @param sessionToken The session token for which the {@link DeathRecipient} call has been * received. * @return Whether the clean up was successful. Multiple calls with two tokens holdings the * same binder will return false. */ protected boolean cleanUpSession(CustomTabsSessionToken sessionToken) { try { synchronized (mDeathRecipientMap) { IBinder binder = sessionToken.getCallbackBinder(); DeathRecipient deathRecipient = mDeathRecipientMap.get(binder); binder.unlinkToDeath(deathRecipient, 0); mDeathRecipientMap.remove(binder); } } catch (NoSuchElementException e) { return false; } return true; }
public void linkToDeath(DeathRecipient deathRecipient, int i) throws RemoteException { }
public boolean unlinkToDeath(DeathRecipient deathRecipient, int i) { return false; }