OkBinder:一个 AIDL 的替代方案

630 阅读1分钟
原文链接: www.ctolib.com

OkBinder

OkBinder is an alternative to AIDL. OkBinder is very lightweight, with only one class, 100+ lines of code. With OkBinder you can find errors in IPC earlier.

OkBinder 是一个 AIDL 的替代方案。 OkBinder 非常轻量级,只有一个类,100+行代码。 使用 OkBinder 你可以更早的发现 IPC 中的错误。

Setting up the dependency

last_version:

implementation 'cn.thens:okbinder:<last_version>'

Sample usage

Define a remote interface with @OkBinder.Interface annotation.

使用注解 @OkBinder.Interface 修饰远程服务接口。

@OkBinder.Interface
interface IRemoteService {
    fun doSomething(aInt: Int, aLong: Long, aString: String)
}

On the server side, instantiate OkBinder using the remote interface above.

在服务端,使用上面的远程接口创建 OkBinder 的实例。

class MyService: Service() {
    private val okBinder = OkBinder(object: IRemoteService {
        override fun doSomething(aInt: Int, aLong: Long, aString: String) {
            // pass
        }
    })
    
    override fun onBind(intent: Intent?): IBinder? {
        return okBinder
    }
}

On the client side, create a proxy for the remote interface.

在客户端,创建一个远程接口的代理。

class MyActivity: Activity(), ServiceConnection {
    override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
        val remoteService = OkBinder.proxy(service!!, IRemoteService::class.java)
        remoteService.doSomething(0, 0L, "")      
    }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        bindService(Intent(this, MyService::class.java), this, Context.BIND_AUTO_CREATE)
    }
}

If you want to learn more about the usage of OkBinder, please refer to OkBinderSample .

如果你想跟深入了解 OkBinder 的用法,请参考 OkBinderSample.

查看原文: OkBinder:一个 AIDL 的替代方案