我想在Android架构组件概念中实现/重构应用程序,请参阅https://developer.android.com/jetpack/docs/guide

在这个主题Android Architecture Components ViewModel - communication with Service/IntentService中,我找到了一个很好的答案来解决这个问题,请参阅https://stackoverflow.com/a/46736146/6251815

但我想问一下,如何从存储库绑定服务,因为我们既没有上下文也没有活动 . 要明确这一点,问题是如何合并这两个概念 .

What is my situation?

我需要有一个boundService(参见https://developer.android.com/guide/components/bound-services),它来自第三方作为库(让我们称之为'3rd party SDK') . 这个'3rd party SDK'会在与某些外部硬件的蓝牙连接上做一些异步操作,因此它可以作为一个或多或少永久的后台服务运行 . 但是,它实现为服务(intentservice,因此活动可以绑定),我们必须通过实现自定义事件侦听器接口来接收事件 .

What do I want to do?

我也想使用架构组件 . 我定义了View和ViewModel,我想使用一个存储库作为'Dagger2 Singleton',它提供本地存储的数据以及Web服务调用,请参阅https://developer.android.com/jetpack/docs/guide#fetch-data

我的第一个意图是,我可以将“第三方SDK”作为某种异步准远程数据源处理,因此,存储库也应该绑定到“第三方SDK” .

不幸的是,我们通常需要以下代码将后台服务绑定到活动:

Intent csIntent = new Intent(XXX, ThirdPartyService.class);
YYY.bindService(csIntent, <instance of ServiceConnection>, Context.BIND_AUTO_CREATE);

其中XXX和YYY是上下文和活动(但两者都不应出现在存储库中!)

What is the problem?

如果我想根据https://developer.android.com/jetpack/docs/guide#manage-dependencies实现为dagger2 @Singleton的'architecture component repository',那么如何根据https://developer.android.com/guide/components/bound-services修改以活动为中心的后台服务绑定的概念

不幸的是,我发现这个问题的唯一半官方文档说明了一个演示'should'(但票证已关闭):https://github.com/googlesamples/android-architecture-components/issues/20

感谢任何提示如何合并这两个概念