Android体系结构组件:ViewModel /存储库与绑定到Service / IntentService

时间:2018-11-02 12:49:50

标签: android mvvm android-architecture-components android-viewmodel bindservice

我想将应用实现/重构为Android Architecture Components概念,请参见https://developer.android.com/jetpack/docs/guide

在主题Android Architecture Components ViewModel - communication with Service/IntentService中,我找到了关于体系结构问题的很好的答案,请参见https://stackoverflow.com/a/46736146/6251815

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

我的情况如何?

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

我想做什么?

我也想使用架构组件。我定义了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是上下文和活动(但不应同时出现在存储库中!)

出了什么问题?

如果我想从“架构组件存储库”访问此后台服务,必须根据https://developer.android.com/guide/components/bound-services修改以活动为中心的后台服务绑定的概念,该实现根据{{ 3}}

不幸的是,我发现此问题的唯一半官方文件指出“应该”制作演示(但票证已关闭):https://developer.android.com/jetpack/docs/guide#manage-dependencies

感谢您提供有关如何合并这两个概念的任何提示

0 个答案:

没有答案