Android 与父活动的通信,刷新父活动

Android 与父活动的通信,刷新父活动,android,android-intent,android-activity,Android,Android Intent,Android Activity,对于子活动更改父活动数据的情况,我无法找到最佳解决方案 我有一个包含项目列表的活动A。活动A启动活动B向用户显示详细信息。用户可以运行操作并创建活动C。活动C为活动A中的列表创建新元素 数据保存在数据库中,因此传递数据没有问题。我只对通知感兴趣 通知活动A数据已更改的最佳解决方案是什么? 目前我了解到两种解决方案: 1) 按活动B和C返回结果,其中包含startActivityForResult(..)和Extras。结果将包含消息“datachanged”->true/false 我不喜欢这

对于子活动更改父活动数据的情况,我无法找到最佳解决方案

我有一个包含项目列表的活动A。活动A启动活动B向用户显示详细信息。用户可以运行操作并创建活动C。活动C为活动A中的列表创建新元素

数据保存在数据库中,因此传递数据没有问题。我只对通知感兴趣

通知活动A数据已更改的最佳解决方案是什么?

目前我了解到两种解决方案:

1) 按活动B和C返回结果,其中包含
startActivityForResult(..)
Extras
。结果将包含消息“datachanged”->true/false

  • 我不喜欢这个,因为我不能直接发送消息
2) 始终在恢复时刷新活动A中的数据

  • 这不是在浪费加工吗
3) 将意图从活动C发送到活动A(广播)

我发现的解决方案几乎肯定是错误的:

4) 保存在某个全局状态

  • 没有全球国家(我说得对吗?)。我们不应该这样做,因为有一个额外的抽象层(intents)
5) 使用getParent()可以使用父活动

  • 返回时,可以销毁并重新创建父活动

活动之间没有其他更轻的messanger系统吗?类似于活动服务通信中的
Handler
messanger
。也许不应该有,因为这违反了设计?

通过B和C发送带有startActivityForResult的消息是最好的方法。

另一种选择是使用广播或本地广播,以便将通知/事件从C发送到A

它将看起来像: 1.活动A在onCreate中加载数据

  • 活动A将广播接收器注册到某个自定义操作“com.mypackage.datachanged”

  • 一旦活动C更改了数据,它将使用相同的操作发送广播意图

  • 这样,如果活动A仍保留在内存中,它的接收器将捕获事件并在需要时重新加载列表。如果活动A被终止-它将在重新创建时自动刷新数据

    一些注意事项: 1.不要忘记在活动A的onDestroy中取消注册接收器。
    2.您可以使用本地广播而不是广播。优点:更好的性能和安全性(你的意图永远不会离开你的应用程序)。

    这一条说广播接收器应该在
    onPause()中注销。
    。所以看起来我不应该在活动处于后台时使用广播。因为你想让你的接收器在活动处于后台时运行——你应该像android文档中所说的那样,将其视为bg线程/长时间运行的操作。我同意在大多数情况下,接收机将在onPause取消注册,但您的情况有点不同,所以请随意使用广播接收机,享受更好的性能和灵活性。是的,您是对的。即使我不注销receiver,我也不会获取事件,因为生成它们的是我,而不是其他应用程序或系统服务。