来自有界服务的 StartActivityForResult
Posted
技术标签:
【中文标题】来自有界服务的 StartActivityForResult【英文标题】:StartActivityForResult from a bounded Service 【发布时间】:2021-02-14 08:37:36 【问题描述】:我有一个绑定到 Activity A 的 Service,我需要从这个 Service 调用 Activity B 并等待结果。
我设法这样调用活动 B:
val intent = Intent(contextOfActivityA, ActivityB::class.java)
(contextOfActivityA as ComponentActivity).startActivityForResult(intent, 123)
问题是我不知道如何捕捉 ActivityB 的结果。 如果我使用 onActivityResult 永远不会被调用:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
if (resultCode == Activity.RESULT_OK)
//result
我该怎么做?请记住,我只能控制 Service,因此无法修改或处理 Activity A 中的结果调用。
谢谢
【问题讨论】:
“我需要从这个服务中调用一个 Activity B 并等待结果”——从 android 应用架构的角度来看,这确实令人恐惧。 感谢您的回答,您能解释一下原因吗? 请解释你为什么认为你需要这样做以及你到底想做什么。 我最终改变了应用基础架构。 【参考方案1】:这是不可能的。 Service
s 作为独立实体运行,没有 UI 并执行后台活动。当Service
启动Activity
时,Activity
在与 UI 关联的任务中运行。 Activity
可以启动另一个 Activity
并返回结果(使用 startActivityForResult()
),但 Service
完全不同。
【讨论】:
我现在明白了,服务可能是错误的架构选择,因为我也必须使用 UI,你知道最正确的选择是什么吗? 您可以通过将数据写入 SQLite 数据库、文件或将日期存储在SharedPreferences
中来提供持久性。不完全确定您要在这里构建什么。
我最终改变了应用基础架构。以上是关于来自有界服务的 StartActivityForResult的主要内容,如果未能解决你的问题,请参考以下文章
应用程序服务是否可以在DDD中的有界上下文中调用其他应用程序服务?