binder是一个远程对象的基础类,核心部分是远程调用机制,这部分是由IBinder定义的。它是对IBinder类的实现,其中IBinder类提供这样一个类的标准的本地化实现方式。
大多数开发者不会去直接实现Binder类,而是用AIDL工具来描述他们自己想要的接口,借助它来生成一个合适的Binder子类。然而,你也可以直接继承Binder来实现你自定义的RPC(Remote procedure Call)协议,或者更简单地,实例化一个原生的Binder对象,然后直接将它作为token能够在不同的进程里直接被调用。
binder只是一个很基础的IPC(Inter-process Communication)原子部分。它对一个应用的生命周期没有影响,只要创建它的所在进程一直运行,它就一直可调用。为了正确使用它,你必须在应用的一级控件(service, activity或者contentprovider)的context里进行操作,让系统知道你所在的进程,并且保证它一直运行。
有一种情况你要注意,你所在的进程可能会被销毁。当你的进程再次启动时,你就需要重新创建一个Binder然后重新绑定它。例如,如果你正在Activity里使用binder,你的acitvity所在的进程可能会被销毁,这样你的activity无法被调用;如果你的activity后面被重新创建,你需要创建一个新的binder,然后再次将它传递到正确的位置支。你还需要意识到,你的进程可能因为其它原因被启动(例如接收广播),但是它不会重新创建a