Android 开发人员指南有一个关于Fragments使用的不错的部分。使用 Fragments 的一种方法是没有 UI。有一些引用将其用作后台处理的手段,但是 Fragments 为该领域带来了哪些优势?我会选择在哪里使用 Fragment over Threads、AsyncTasks、Handlers 等进行后台处理?
5 回答
实例可以通过Fragment
设备配置更改(如屏幕旋转)持续存在。因为Activity
当配置更改发生时,an 将被销毁并重新创建,所以很难设计一个跟踪线程或AsyncTask
. 另一方面,系统负责在配置更改的另一端(可以这么说)将持久性重新附加Fragment
到正确的位置。Activity
您仍然会使用线程或AsyncTask
,只是现在才Fragment
持有它。
它可能还有其他用途,但这是我能想到的。
我有一大块相当复杂的代码来处理各种社交网络的登录 - facebook、google、twitter。这是我需要在不同活动中重复使用的代码,因为用户可以从应用程序的不同位置登录。它不属于基本活动类,因为您只能从一个类继承,而我将该继承用于其他不相关的功能。
无 ui 片段非常适合我的情况,片段非常适合需要,因为我需要生命周期回调,例如(facebook 在这方面臭名昭著,需要例如 onActivityResult 等)。
我同意格雷格·恩尼斯的观点。
我现在正在开发一个必须执行一系列 RESTful api 调用的应用程序。在大多数情况下,这些只是在一个活动中完成。但是我只是使用了一个无头片段来处理两个不同的活动,每个活动都需要进行相同的多次调用序列,当然,还要处理序列中任何地方的错误。通过将序列集中在一个片段中,我可以避免重复大量代码。
我们有另一个 api 调用,它返回了很多数据,这些数据现在都在 UI 线程上解析并且花费了太长时间。在后端 api 的未来版本中,服务器端将分页数据,我们的应用程序将需要进行一系列 api 调用才能获得完整的结果。我认为对于保留的无头片段来说,这将是一个很好的应用程序。发起活动可以启动无头片段和调用序列。如果第一次调用没有错误,该活动可以启动下一个活动,以显示初始结果,而片段只是不断地向服务器询问下一页数据。api 调用已经在后台线程上完成。我很确定保留的片段必须在自己的工作线程上运行。
在了解片段的 setRetainInstance(boolean)中有更多关于保留片段的信息
这些也称为无头片段。你可以在这里阅读更多
Headless Fragments 的一个非常有用的特性
Headless Fragments 有一个非常有用的特性——它们可以由 FragmentManager 在配置更改时保留。由于它们没有任何与之相关的 UI,因此例如当用户旋转设备时,它们不必被销毁和重新构建。为了激活这种行为,只需在初始化时设置片段的保留标志。这可以在 Fragment 的 onCreate 方法中完成。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}