Android开发人员指南对Fragments的使用有一个不错的部分。使用Fragments的一种方法是没有UI。有一些参考使用它作为后台处理的一种手段,但碎片带给这个领域的优势是什么?我会在哪里选择使用Fragment over Threads,AsyncTasks,Handlers等进行后台处理?
答案 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调用已在后台线程上完成。我很确定保留的片段必须在自己的工作线程上运行。
的保留片段的更多信息答案 3 :(得分:3)
这些也被称为无头碎片。 您可以阅读更多here
答案 4 :(得分:0)
无头碎片的非常有用的功能
无头碎片,具有一项非常有用的功能-它们可以 由FragmentManager在配置更改中保留。以来 他们没有任何与他们相关的用户界面,他们不必 当用户旋转设备以进行销毁并再次重建时 例。为了激活此行为,只需设置 片段初始化时的保留标志。可以做到 在Fragment的onCreate方法中。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}