android - 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
感谢任何提示如何合并这两个概念
解决方案
推荐阅读
- gis - 使用 OpenLayers 5 在地图上添加旋转的卫星图像
- php - Slim-3 php 框架显示页面未找到错误,即使 url 正确?
- android - 自定义视图翻译动画在回收站视图中不起作用
- yarnpkg - lerna的run命令和yarn的wsrun有什么区别?
- ruby-on-rails - 在 Rails 中将邮件附件保存为 Active Storage 对象
- java - 重构使用流 API 的方法
- testing - QA 阶段的新提交
- javascript - 如何一次滚动一个服务部分,同时将 .service-inner 元素保持在同一个位置?
- php - 如何从地址字符串中提取城市州邮政编码?
- angular - 将我的 Angular 项目更新为 Angular 7 时出错