美文网首页
Kotlin实现绑定服务并调用服务中方法

Kotlin实现绑定服务并调用服务中方法

作者: 妖苔 | 来源:发表于2018-04-23 14:51 被阅读109次

    为了方便将所有的类和方法都放在Activity中以内部类的方式展现

    自定义Server

    //internal 是Kotlin中的修饰符表示同一模块中任何地方可见,inner表示为内部类
    internal inner class MyServer : Service() {
        override fun onBind(p0: Intent?): IBinder {
            return MyBinder()
        }
        
       
        fun methodOneInServer() {//Activity中无法调用
            Toast.makeText(applicationContext, "服务里的方法执行了。。。", Toast.LENGTH_SHORT).show()
        }
    
        fun methodInServer() {
            Toast.makeText(MainActivity@ this, "服务中的方法", Toast.LENGTH_SHORT).show()
        }
    
        //服务中的Binder对象,实现自定义接口IMyBinder,决定暴露那些方法给绑定该服务的Activity
        internal inner class MyBinder : Binder(), IMyBinder {//注意实现接口的方式
            override fun invokeMethodInMyServer() {
                methodInServer()//暴露给Activity的方法
            }
            
        }
    }
    

    自定义接口

     internal interface IMyBinder {
        fun invokeMethodInMyServer()
    }
    

    Activity中绑定

    class MainActivity : AppCompatActivity() {
    internal lateinit var myBinder: IMyBinder
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //上下文,和.class文件的写法
        val serverIntent = Intent(MainActivity@ this, Service::class.java)
        val myConnection = MyConnection()
        bindService(serverIntent, myConnection, Context.BIND_AUTO_CREATE)
        myBinder.invokeMethodInMyServer()
    }
    
    //自定义ServiceConnection
    internal inner class MyConnection : ServiceConnection {
        override fun onServiceDisconnected(p0: ComponentName?) {
        }
    
    
        override fun onServiceConnected(p0: ComponentName?, p1: IBinder?) {
            myBinder = p1 as IMyBinder//对象的强制转换
        }
    }
    

    }

    应为绑定服务之后会获得一个Binder对象,该对象由ServiceConnection返回,由Server中onBind方法创建,该自定义Binder实现一个自定义接口,在自定义Binder对象实现该接口的方法的时候与Service中的方法关联起来,从而可以从绑定Server的Activity中调用Server暴露出来的部分方法
    源码较为简单就不贴出来了

    相关文章

      网友评论

          本文标题:Kotlin实现绑定服务并调用服务中方法

          本文链接:https://www.haomeiwen.com/subject/ohcllftx.html