【发布时间】:2015-10-26 18:54:45
【问题描述】:
一些背景知识,我目前正在开发一个包含一些活动组件和“入口点”的库。简单来说,目标是让库控制 UI,根据一系列 UI 交互做一些工作,并最终将结果传播回原始的非库活动。我试图在下图中总结流程:
如您所见,可以通过开始活动 B1 或 B2 进入图书馆,最终到达活动 D。
问:从设计的角度来看,将结果传播回 A 的最佳(或首选)方式是什么?
我已经尝试使用FLAG_ACTIVITY_NEW_TASK 启动 B1/B2 并使用 FLAG_ACTIVITY_FORWARD_RESULT 进行库内活动,直到最后 D 以 FLAG_ACTIVITY_CLEAR_TASK 启动,因此它成为任务中的“顶部”和唯一的活动。但是,这似乎无法正常工作,我还需要它与 API 级别 10 兼容。
另一个问题是,活动 A 可能是任何东西,并且事先不知道,传递 A.class 感觉非常难看。
似乎这可能是一个最好通过使用服务来解决的问题?
编辑: 为了进一步简化问题的概念,这里处理的主要问题非常类似于将回调传递给原始活动的“回调”机制。当然,带有类似“监听器”接口的回调将无法工作,因为原始活动已暂停,并且如果当前未运行,广播也不会被传递。
另外,澄清一下,只有库应该考虑作为解决方案,因为活动 A 可能来自任何使用该库的第三方项目。
【问题讨论】:
-
我通常会尽量避免这些复杂的情况,只需将所需的数据写入
SharedPreferences或您喜欢的任何格式,这样任何需要数据的Activity都会从那里获取他们的份额。 -
SharedPreferences的问题是状态/结果不应在库调用之间保持不变。并且不能保证活动 A(或应将结果传播到的任何其他活动)将清除存储的偏好值。