java - 应如何将长时间运行的操作中的数据传递到要在 UI 中显示的 fragment ?

标签 java android android-fragments

我是 Android 新手,有一个设计问题。所以我明白建议使用Fragments。我还了解一个 Activity“拥有”一个 Fragment。
所以我的问题如下:
假设我们想要进行长时间运行的后台调用,例如HTTP 到服务器。
结果应显示在 UI 中。
那么最佳/标准做法是什么?
1) 执行长时间运行调用的对象是否应该由 Activity“拥有”,并将结果发送回 Activity,然后从 Activity 发送回 Fragment,以便更新 UI?
2)或者执行长时间运行调用的对象应该由Fragment“拥有”,并将结果发送回Fragment以更新UI?那么 Activity 完全不知道这一点吗?

最佳答案

两者都不是,恕我直言。执行长时间运行的对象应由 Service 管理,您在其中使用 WakeLock(如果需要,还可以使用 WifiLock),而长时间运行的对象应由 Service 管理。 -running HTTP 操作正在运行。 IntentService 可能是一个不错的选择,因为无论如何您都需要一个后台线程。

该服务反过来可以使用某种进程内事件总线(LocalBroadcastManager、greenrobot 的 EventBus、Square 的 Otto 等),让 UI 层了解任何重要事件发生于该 HTTP 操作。 Activity 或 fragment 是否订阅总线上的事件取决于事件需要发生什么。如果 fragment 的小部件需要更新, fragment 将订阅。如果 fragment 的组合发生变化,或者需要一些其他 Activity 级别的 UI 更改,则 Activity 将订阅。

所有这些都假设“长时间运行”是指花费一秒左右的时间。

关于java - 应如何将长时间运行的操作中的数据传递到要在 UI 中显示的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28907289/

相关文章:

java - 如何从 Activity 中调用 fragment 方法?

android - 从android中的edittext获取空值

java - Spring Security - 指定哪个 X509 可以访问哪个特定端点

java - 在 Athena 中重命名分区列名称

java - 如何强制属性等于常量值之一(在 Java 中)?

java - 多项目 Maven 设置中的 GET 托管模式

java - 在 Android Studio 上使用 Android 和 Google App Engine

android - 在 Android Q/API 29 上列出 WiFi 网络

Android - 无法使用编辑文本字符串的过滤结果更新 ListView

java - 如何将调用 Request.callback onCompleted() 方法时从 Facebook 返回的数据传递到我在 Android 中的 fragment ?