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"/>