首页 > 解决方案 > Android 架构组件:ViewModel/Repository 与绑定到 Service/IntentService

问题描述

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

在本主题Android 架构组件 ViewModel - 与 Service/IntentService 的通信中,我找到了架构问题的非常好的答案,请参阅https://stackoverflow.com/a/46736146/6251815

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

我的情况如何?

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

我想做什么?

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

我的第一个意图是,我可以将“第 3 方 SDK”也作为某种异步准远程数据源来处理,因此,存储库也应该绑定到“第 3 方 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修改以活动为中心的后台服务绑定的概念根据https://developer.android.com/jetpack/docs/guide#manage-dependencies实现为 dagger2 @Singleton

不幸的是,我发现这个问题的唯一半官方文件表明“应该”制作演示(但票已关闭):https ://github.com/googlesamples/android-architecture-components/issues/20

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

标签: androidmvvmandroid-architecture-componentsandroid-viewmodelbindservice

解决方案


推荐阅读