gpt4 book ai didi

android - 在 Fragment 中通知已处理信息的 Activity

转载 作者:行者123 更新时间:2023-11-29 00:29:22 28 4
gpt4 key购买 nike

通知执行某些后台处理的 fragment 的托管 Activity 的推荐方法是什么,它已完成。假设 fragment 正在运行一些在主循环器之外执行工作的线程。

一个简单的回调不会做,因为:

  • Activity 可能会因屏幕旋转而分离,这会导致 NullPointerException。
  • 从 Activity 中进行投票是愚蠢的
  • 仅在附加时调用 Activity 一次,并在每次 onCreate 调用后让 Activity 检查(即由于屏幕旋转)。
  • 我目前所做的但似乎是错误的:每当附加 fragment 时,它都会检查工作是否完成并通过回调通知 Activity 。如果 fragment 完成工作,它还会回调 Activity (如果已附加)。

为什么我认为是错误的?因为我有一些非常丑陋的方法来检查 fragment 是否已附加以及工作是否已完成以便可能调用回调。当在 fragment 中执行某些工作期间引发异常并且 Activity 被分离时,这变得非常愚蠢。如果 android 决定在同一时刻调用 onSaveInstance,我将不得不将 Exception 放入 Bundle 中,并在稍后从保存状态重新创建 Activity 和 fragment 时交付它。此外,我可能会遇到这样一种情况,即 Activity 将收到两次相同的回调(一次是检查 fragment ,第二次是 fragment 被附加时;这可能发生在应用程序被保存和恢复时)

这会生成如此多的代码,在我看来,如果 Activity 不会分离,代码会更加清晰。这就是为什么我希望我做错了什么,并希望有人能为我提供更好的解决方案。

最佳答案

我会说你应该为你的后台处理使用服务,但如果你出于特定原因选择了一个 fragment ,你可以坚持使用它。您应该从可能与 Activity 具有不同生命周期的 fragment 或服务通知 Activity 的方式是通过 BroadcastReceiver。 .使用这种方法, Activity 可以 registerunregister在其自己的生命周期回调期间的 BroadcastReceiver。从 fragment 或服务你只是send the broadcast忘了它吧。如果一个 Activity 正在监听广播,它将接收广播,否则什么也不会发生。

关于android - 在 Fragment 中通知已处理信息的 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16800740/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com