Service与Activity通过Binnder通讯

博客介绍了在Android开发中,自定义TestService继承Service,其内部类MyBinder继承Binder并定义内部接口OnBinderListener。在Activity中定义ServiceConnection获取myBinder,实现OnBinderListener接口,service调用函数会触发对应实现。同时提醒注意解绑和注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.自定义TestService 继承Service,内部类MyBinder继承Binder,内部接口OnBinderListener

class TestService : Service() {
    override fun onBind(intent: Intent?): IBinder? {
            return MyBinder()
    }
    //接Activity转过来的Intent,然后做服务逻辑
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
          var flag = intent!!.getBooleanExtra("flag",false)
         onBinderListener!!.Flash(flag)
        return super.onStartCommand(intent, flags, startId)
    }
    //定义接口,在Activity中实现接口方法,
    interface OnBinderListener{
      fun Flash(onFlay:Boolean)
  }
    var onBinderListener:OnBinderListener? =null
    inner class MyBinder: Binder() {
        fun setOnBinderListener(listener: OnBinderListener){
            onBinderListener = listener
        }
    }

}

2.在Activity中定义ServiceConnection,得到myBinder ,实现OnBinderListener接口,service里调用flash函数就会调用这里的实现的flash函数

  var myBinder:TestService.MyBinder? = null
    var flag:Boolean = false
    var serviceConnect:ServiceConnection = object :ServiceConnection{
        override fun onServiceDisconnected(name: ComponentName?) {
            myBinder = null
        }
        override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
            myBinder = service as TestService.MyBinder
            myBinder!!.setOnBinderListener(object :TestService.OnBinderListener{
                override fun Flash(onFlay: Boolean) {
                    test.text = onFlay.toString()
                }
            })
        }
    }
  bindService(Intent(this,TestService::class.java),serviceConnect,Context.BIND_AUTO_CREATE)
        btn.setOnClickListener {
            if(flag){
               flag = false
            }else{
                flag = true
            }
            var intent = Intent(this,TestService::class.java)
            intent.putExtra("flag",flag)
            startService(intent)
        }

注意解绑

 unbindService(serviceConnect)

注意注册

  <service android:name=".TestService"/>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值