我有一个远程服务,可以绑定到哪些外部应用程序。有些情况下,我可能希望拒绝这种约束。 According to the documentation,远程服务拒绝绑定的权限
将通信信道返回给服务。如果 客户端无法绑定到服务,可能会返回null。
@Override
public IBinder onBind(final Intent intent) {
return null;
}
返回null确实不返回IBinder对象,从而防止了连接,但是调用应用程序不能正确地接收该“信息”。
boolean bound = context.bindService(intent, serviceConnection, flagsHere);
无论是否从服务返回null或不是,这总是返回true?
According to the documentation,
返回 - 如果您已成功绑定到服务,真正为 返回;如果连接不言,所以你会 没有收到
我曾以为,从onBind返回null会造成bindService返回false服务对象返回false。假设是不是一个好主意......
返回null,但是不会阻止ServiceConnection被
实例
调用,但这样做的结果就没有选项来检查粘合剂其实空的onServiceConnected。
所以,我的问题 - 如果绑定请求被拒绝,应用程序如何“知道”?
此外,如果我决定,要onRebind请求(之前曾从onUnbind返回TRUE)飞应被拒绝,我似乎无法重写的行为,以防止这种情况:
@Override
public void onRebind(final Intent intent) {
if (shouldAllowRebind(intent)) {
super.onRebind(intent);
} else {
// ?
}
}
我希望有人能为我揭开一些光。提前致谢。
bindService()的返回值已经存在很长时间了。 “如果绑定请求被拒绝,应用程序如何”知道“?“ - 大概它的'ServiceConnection'永远不会被'onServiceConnected()'调用 – CommonsWare
Thanks @CommonsWare我希望你能发现这个问题!由于'bindService()'返回true,所以应用程序保留在' limbo'期待'ServiceConnection'调用'onServiceConnected()'因为它不会(由于不正常行为),你会建议一个等待几秒钟的监控线程,然后检查一个'boolean'标识符是否表示方法是调用?否则,将上下文标记为null,并希望GC将它整理出来?我担心Android会认为应用程序绑定到服务并将其保存在内存中 – brandall
“你会建议一个监视器线程,等待几个秒,然后检查一个布尔标识符是否表示该方法被调用?“ - 个人而言,我会寻求以其他方式解决整体问题(例如,拒绝对binder的单个API调用),而不是尝试拒绝绑定。鉴于此实施使用某些东西来实现超时(例如,'View'上的'postDelayed()')可能是您的最佳选择。 “否则,将使用的上下文标记为空,并希望GC将它整理起来?” - 对不起,但我不明白这一部分。 – CommonsWare