我正在为
Android手机的客户端/服务器应用程序设计框架.我对Java和Android都很陌生(但对于一般的编程或特别是线程编程来说并不陌生).
有时我的服务器和客户端将处于相同的进程中,有时它们将处于不同的进程中,具体取决于具体的用例.客户端和服务器接口类似于以下内容:
IServer.aidl:
package com.my.application; interface IServer { /** * Register client callback object */ void registerCallback( in IClient callbackObject ); /** * Do something and report back */ void doSomething( in String what ); . . . }
IClient.aidl:
package com.my.application; oneway interface IClient { /** * Receive an answer */ void reportBack( in String answer ); . . . }
现在这里有趣的地方.我可以预见客户端调用IServer.doSomething()的用例,后者又调用IClient.reportBack(),并根据报告的内容,IClient.reportBack()需要发出另一个对IClient.doSomething的调用( ).
这里的问题是IServer.doSomething()通常不会是可重入的.只要IClient.reportBack()始终在新线程中调用,这没关系.在这种情况下,我可以确保IServer.doSomething()的实现始终适当地同步,以便来自新线程的调用阻塞直到第一次调用返回.
如果一切按照我认为的方式工作,那么通过单独声明IClient接口,我保证就是这种情况.至少,我无法想到从IServer.doSomething()到IClient.reportBack()的调用可以立即返回(单向应该确保),但IClient.reportBack仍然可以重新调用IServer.doSomething在同一个线程中递归.必须启动IServer中的新线程,否则旧的IServer线程可以重新用于对IServer.doSomething()的内部调用,但只有在返回IServer.doSomething()的外部调用之后.
所以我的问题是,一切都按我认为的方式运作吗? Android文档几乎没有提到单向接口.