没有UI的Fragment的用例是什么?

时间:2012-07-17 22:16:43

标签: android android-fragments

Android开发人员指南对Fragments的使用有一个不错的部分。使用Fragments的一种方法是没有UI。有一些参考使用它作为后台处理的一种手段,但碎片带给这个领域的优势是什么?我会在哪里选择使用Fragment over Threads,AsyncTasks,Handlers等进行后台处理?

5 个答案:

答案 0 :(得分:43)

Fragment实例可以通过设备配置更改(如屏幕旋转)保持不变。因为在发生配置更改时将销毁并重新创建Activity,因此很难设计一个跟踪线程或AsyncTask的线程。另一方面,系统负责将持久的Fragment重新附加到配置更改的另一端(可以说)的正确Activity。你仍然会使用一个主题或AsyncTask,但现在只有Fragment持有它。

可能还有其他用途,但我能想到的就是。

答案 1 :(得分:12)

我有大量相当复杂的代码来处理各种社交网络的登录 - facebook,google,twitter。这是我需要在不同活动中重复使用的代码,因为用户可以从应用程序中的不同位置登录。它不属于基本活动类,因为您只能从一个类继承,并且我将该继承用于其他不相关的功能。

一个无ui片段非常适合我的情况,片段非常适合需要,因为我需要生命周期回调,例如(facebook在这方面很臭名昭着,需要onActivityResult等)。

答案 2 :(得分:3)

我同意Greg Ennis的观点。

我正在开发一个应用程序,必须执行一系列RESTful api调用。在大多数情况下,这些只是在一个活动中完成。但我只是使用一个无头片段来处理一个案例,其中每个需要两个不同的活动来制作相同的多个调用序列,当然,在序列中的任何地方处理错误。通过将序列集中在一个片段中,我可以避免重复相当数量的代码。

我们有另一个api调用,它可以获取大量数据,这些数据现在正在UI线程上解析并且需要很长时间。在后端api的未来版本中,服务器端将分页数据,我们的应用程序将需要进行一系列api调用以获得完整的结果。我认为这对于保留无头片段来说是一个很好的应用。启动活动可以启动无头片段和呼叫序列。如果第一次调用没有错误,那么该活动可以启动下一个活动,以显示初始结果,而片段只是保持chugging并向服务器询问下一页数据。 api调用已在后台线程上完成。我很确定保留的片段必须在自己的工作线程上运行。

有关Understanding Fragment's setRetainInstance(boolean)

的保留片段的更多信息

答案 3 :(得分:3)

这些也被称为无头碎片。 您可以阅读更多here

答案 4 :(得分:0)

无头碎片的非常有用的功能

  

无头碎片,具有一项非常有用的功能-它们可以   由FragmentManager在配置更改中保留。以来   他们没有任何与他们相关的用户界面,他们不必   当用户旋转设备以进行销毁并再次重建时   例。为了激活此行为,只需设置   片段初始化时的保留标志。可以做到   在Fragment的onCreate方法中。


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

ref- https://luboganev.github.io/blog/headless-fragments/