来自有界服务的 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】:

这是不可能的。 Services 作为独立实体运行,没有 UI 并执行后台活动。当Service 启动Activity 时,Activity 在与 UI 关联的任务中运行。 Activity 可以启动另一个 Activity 并返回结果(使用 startActivityForResult()),但 Service 完全不同。

【讨论】:

我现在明白了,服务可能是错误的架构选择,因为我也必须使用 UI,你知道最正确的选择是什么吗? 您可以通过将数据写入 SQLite 数据库、文件或将日期存储在 SharedPreferences 中来提供持久性。不完全确定您要在这里构建什么。 我最终改变了应用基础架构。

以上是关于来自有界服务的 StartActivityForResult的主要内容,如果未能解决你的问题,请参考以下文章

android系统如何管理连接到有界远程服务的客户端列表

应用程序服务是否可以在DDD中的有界上下文中调用其他应用程序服务?

微服务和限界上下文

微服务

学界 | 谷歌推出有界负载的一致性哈希算法,解决服务器负载均衡问题

排序算法堆排序及有界堆排序Java实现及分析