绑定用于进程间(而不是进程内部)通信/远程方法调用,因此为什么/如何在没有不同进程参与的情况下通过绑定实现Activity和Service之间的通信。
当应用程序的第一个组件被初始化时,对内核的请求被触发(我认为是通过ActivityManagerService(Native)-AMS>如果不存在相应的进程,则在system_process中运行。一旦创建了进程,那么任何其他组件(比如服务)都属于同一个进程,除非指定。现在这个服务想要与同一流程的Activity通信。那么为什么IBinder是其中之一呢?
这难道不违反创建binder的基本原则吗?
进程间通信是通过将数据写入某个源(如套接字或管道)并由另一个进程读取它来完成的。同样的进程没有理由不能读和写——它比在进程内传递数据的其他方式效率低,但它仍然有效。
至于你为什么要在同一进程中使用它——另一种选择是Android有两种与服务通信的方式,一种是如果它们是相同的进程,另一种是如果它们不是。这将使框架的事情变得复杂,而收效甚微。对于客户端可能或可能不在同一进程中的服务(例如,同一公司的客户端应用程序和其他应用程序都使用的服务),这将使事情变得非常复杂。所以它们只是对两者使用相同的方法。
绑定是IPC的一个构造——这是真的,但是,如果在同一个进程中用于Activity和Service之间的通信,则没有性能成本,也就是说,它被转换为直接调用而不是RPC。
不要认为binder只用于IPC,但它是Android中通用的通信机制。
你不会在任何地方找到这个文档。我是在Commonsware和Dianne Hackborne(Android团队中binder概念的设计者)之间的一次讨论中发现的。