Android服务是否仅接受来自外部应用程序的一个绑定?

时间:2019-07-02 22:40:26

标签: android kotlin android-service-binding

简介

我现在正在项目 S 中工作,该项目假装创建一个Android服务,该服务将在此 S 项目中启动,并从另一个项目 B 我想绑定到在 S 上运行的此服务。 我正在阅读Service for Android的官方文档,并且可以看到Android中的服务支持来自不同客户端应用程序的多个连接。当我在 S 上启动服务并尝试从 B 进行连接时,所有功能均正常运行,并且在 S 的日志中可以看到{{1 }}方法被调用。然后关闭 B ,并调用onBind方法,这很完美。

首次观察

我创建了另一个 B1 应用程序以连接 S 上的服务,这是我的问题,因为我正在提取onUnbind中意图中包含的信息和onBind(intent: Intent?),因此我注意到每次调用这些方法时,即使关闭 B 并再次打开,或者关闭< em> B 并打开 B1

第二次观察

如果我在 S 上运行服务,然后打开 B ,如果我打开 B1 ,则onRebind(intent: Intent?)方法将在我调用时被调用打开的 B 就像 S 仅接受一个连接一样。

结论

我想知道我是否需要对Android服务有所了解,或者我的代码下面有错误

S

中的MainActivity
onBind

S

中的MyService
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        startService(Intent(this, MyService::class.java))
    }
}
B B1 中的

MainActivity
class MyService: Service() {

    override fun onBind(intent: Intent?): IBinder? {
        Log.i("MyService", "***onBind ${intent?.extras?.get("applicationId")} : ${intent?.extras?.get("applicationToken")}")
        return null
    }

    override fun onUnbind(intent: Intent?): Boolean {
        Log.i("MyService", "***onUnbind ${intent?.extras?.get("applicationId")} : ${intent?.extras?.get("applicationToken")}")
        return true
    }

    override fun onRebind(intent: Intent?) {
        Log.i("MyService", "***onRebind ${intent?.extras?.get("applicationId")} : ${intent?.extras?.get("applicationToken")}")
    }

}

0 个答案:

没有答案