Android开发 - IBinder 类与 Binder 类的关系解析

IBinder 类

  • IBinder 类说明

    • IBinder 是一个接口,它是 Android IPC 机制的基础。它定义了一组用于进程间通信的基本操作,但不提供实际的实现IBinder 主要用于描述一个可以被远程调用的对象
  • 主要特点

    • 接口定义IBinder 是一个接口,定义了如何进行进程间通信的基本方法transact()

    • 远程接口:它允许客户端与远程服务进行交互,而不关心具体的实现细节

    • 基础功能IBinder 本身并不实现任何功能,它只是为实际的通信提供了接口

Binder 类

  • Binder 类说明

    • BinderIBinder 的一个实现类,提供了 IPC 的实际功能它实现了 IBinder 接口,并提供了具体的跨进程通信功能Binder 实际上是一个桥梁,它连接了客户端和服务端,使得方法调用可以跨进程进行
  • 主要特点

    1. 实际实现Binder 实现了 IBinder 接口提供了跨进程调用的实际功能

    2. 用于通信:它用于在客户端和服务端之间传递方法调用和数据

    3. 子类化:通常会创建 Binder 的子类,以提供对服务的访问并暴露给客户端

区别总结

  • 接口 vs 实现

    • IBinder 是一个接口,定义了跨进程通信的协议和方法

    • Binder 是 IBinder 的实现,提供了实际的通信功能

  • 功能 vs 定义

    • IBinder 只是定义了跨进程通信所需的方法,没有实际的实现

    • Binder 提供了具体的跨进程通信功能,并可以通过继承和扩展来提供自定义服务

  • 用途

    • IBinder 用于声明一个可以远程调用的接口

    • Binder 用于实现这些接口处理实际的跨进程调用和数据传输

示例说明

  • 定义接口(IBinder)

    public interface IMyService extends IBinder {
        void doSomething();
    }
    
  • 实现 Binder

    public class MyBinder extends Binder implements IMyService {
        private final MyService service;
    
        public MyBinder(MyService service) {
            this.service = service;
        }
    
        // 在这里实现了 IBinder 接口,并提供了 `doSomething()` 方法的具体实现
        @Override
        public void doSomething() {
            service.doSomething();
        }
    }
    
  • 在 Service 中返回 Binder

    public class MyService extends Service {
        private final IBinder binder = new MyBinder(this);
    
        // onBind() 方法返回了 MyBinder 实例,这样客户端可以通过它与服务进行通信
        @Override
        public IBinder onBind(Intent intent) {
            return binder;
        }
    }
    

总结

  • IBinder 是接口,定义了 IPC 的基本协议和方法
  • Binder 是 IBinder 的具体实现,处理实际的跨进程通信和数据传输
posted @ 2024-08-24 16:20  阿俊学JAVA  阅读(49)  评论(0编辑  收藏  举报