Android开发应该重视一下Fragment

本文探讨了在Android应用开发中使用Fragment的优点。介绍了Fragment如何简化不同屏幕尺寸的适配工作,并通过ViewPager实现了灵活的用户界面切换。此外,还讲解了Fragment如何在设备配置变化时保持状态,减少了不必要的数据重新加载。
部署运行你感兴趣的模型镜像

为什么要提倡用Fragment开发APP呢?不使用Fragment也能开大Android的应用,为什么要绕这个弯子呢?Fragment有什么优点?希望大家读完本篇文章能有个新的认识。


作为Android开发者可以使用两个主要的Class来搞定一个APP,使用Activity和Fragment。Activity是先入为主,和我一样的老程序员都习惯于使用Activity来构建项目,可以说它统治了开发很长时间。用户使用你的 App 时所看到的、与之交互的界面,是被某个 activity 托管和控制的。大部分代码存在于这些 Activity 类内,某个时刻通常会有一个 activity 处于可见状态。


举个栗子,一个简单的 activity 看起来像这样:

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

Fragment 类是在 Honeycomb(注:蜂巢 3.0 API level 11)发布时被介绍的。它允许我们把应用组件分解成可重用的部件。Fragment必须被一个 activity 托管,而一个 activity 可以一次托管一个或多个 fragment。

一个简单的 fragment 看起来和 activity 很像,但是具有不同的生命周期回调方法。下面的 fragment 代码段和上面的 activity 代码段完成了相同的事情:建立视图。

public class MainFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_main, container, false);
    }
}
如你所见,activities 和 fragments 看起来非常像,同样被用于构建app。所以,使用 fragments 可以带来什么优势呢?且听我一一道来


Device Optimization 设备优化

我刚刚讲过,Honeycomb 发布时引入了 fragments。Honeycomb 版本首次对平板设备提供了正式支持。fragment 理念的最初目标之一是帮助开发者在构建手机和平板应用时提供不同的用户体验。

邮件客户端是用到 fragment 的典型例子,比如 Gmail App。手机版展示了用户的邮件列表,点击其中一个就跳转到展示邮件内容的详情界面。这个过程包含了两个界面,各自独占屏幕。

当用户在平板上使用 Gmail App 时,可以在一个屏幕上同时看到列表界面和详情界面。显然我们可以在平板上一次显示更多的信息。

Fragments 很容易实现这个功能。列表界面是一个 fragment,详情界面也是一个 fragment。activity 根据屏幕大小决定显示其中一个或全部。

Fragments 的优雅之处在于,不需要修改 fragment 类的代码就可以完成上述事情。作为 app 的可重用组件,fragments 可以以任意多种方式呈现给用户。

这非常棒,但如果你开发的应用不需要兼容手机和平板,还需要使用 fragments 吗?

答案是“yes”。如果将来你改变了主意(注:结合上下文,应该理解为需要大刀阔斧地改代码),你会庆幸当初使用了 fragments。从一开始并没有特别的理由不使用 fragments,但是为了使用 fragments 而重构已有的代码,将是耗时且容易出错的。除了构成UI外,Fragments 还提供了一些其它优秀特性。

ViewPager

比如,使用 fragments 可以很方便地实现 ViewPager。如果你不熟悉 ViewPager,那我就简单说说,它作为一个应用组件,允许用户滑动屏幕以切换界面。很多 app 用到了它,包括 Google Play Store app 和 Gmail app。滑动屏幕就置换了当前的 fragment。

ViewPager 瞄准了 fragments 的一个核心理念。一旦你的特定的应用代码存在于 fragments,这些 fragments 就可以以多种方式被托管。Fragment 不需关心如何被托管,它只需知道如何展示你的应用的特定部分。托管 fragments 的 activity 类,可以显示一个 fragment;或者多个 fragment;或者像 ViewPager 那样通过某种方式显示 fragments。不需要修改应用的核心代码就可以支持这些不同的显示方式。

Other Features 其它特性

所以 fragments 可以帮助我们优化应用以适应不同的屏幕尺寸,可以帮助我们为用户提供有趣的体验。除此之外,它的其它特性也可以帮到我们。

你可以把 fragment 当作一个“设计更合理”的 activity。Fragments 的生命周期允许它做一些 activity 做不到的事情:它分开了实例的创建和视图的创建。

注:作者是指 Fragment 具有 onCreate(...)onCreateView(...)onDestroyView() 等生命周期方法,这些方法使得 fragment 拥有了分开创建实例和视图、以及保存实例而仅销毁视图的能力。而 Activity 的 onCreateView(...) 并不是生命周期回调方法。

这种“分离”允许我们保存 fragment 实例。你知道的,旋转 android 设备屏幕被认为是设备配置发生了变化(配置变化还包括其它几种)。系统会寻找更合适的资源以匹配配置,这个过程中 activities 和 fragments 实例会被系统销毁,然后新的实例会被创建。android 开发者必须考虑这种销毁的情形,因为保存在 activity 和 fragment 中的所有实例变量也同样被销毁了。

Retained fragments”在设备旋转时实例不会被销毁,仅仅是视图被销毁了,其它所有状态都会被保存下来。尽管有一些情形并不适用,retained fragment 仍是十分有用的(注:调用 setRetainInstance(true) 使 fragment 成为 retained fragment)。举个栗子,如果你从网络服务器或者数据库下载大量数据,retained fragment 在设备旋转时仍持有已下载的数据。

Additional Code 额外的代码

与不使用 fragments 相比,当你使用 fragments 构建 android app 时,你的项目会包含更多的 Java 类和略多的代码。多出来的部分代码用于把 fragment 添加给 activity,如果你不熟悉其中的机制,会相当棘手。

一些 android 开发者,特别是那些在 Honeycomb 发布前就已经在开发 android app 的,选择放弃使用 fragments。使用 fragments 带来的复杂度和需要写更多的代码是这些开发者的理由。但正如我之前所讲,使用 fragments 需要付出的这点儿努力是值得的。

Embracing Fragments 涌抱它

对于 Android 开发者而言,fragments 是一个拐点。基于 fragment 构建的应用带来显著的优势,包括基于屏幕尺寸来优化体验、结构良好和可重用的代码。并非所有的开发者涌抱了 fragments,不过现在,时候到溜。我强烈建议 android 开发者大量使用 fragments。



您可能感兴趣的与本文相关的镜像

Qwen-Image

Qwen-Image

图片生成
Qwen

Qwen-Image是阿里云通义千问团队于2025年8月发布的亿参数图像生成基础模型,其最大亮点是强大的复杂文本渲染和精确图像编辑能力,能够生成包含多行、段落级中英文文本的高保真图像

内容概要:本文介绍了一个基于多传感器融合的定位系统设计方案,采用GPS、里程计和电子罗盘作为定位传感器,利用扩展卡尔曼滤波(EKF)算法对多源传感器数据进行融合处理,最终输出目标的滤波后位置信息,并提供了完整的Matlab代码实现。该方法有效提升了定位精度与稳定性,尤其适用于存在单一传感器误差或信号丢失的复杂环境,如自动驾驶、移动采用GPS、里程计和电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置(Matlab代码实现)机器人导航等领域。文中详细阐述了各传感器的数据建模方式、状态转移与观测方程构建,以及EKF算法的具体实现步骤,具有较强的工程实践价值。; 适合人群:具备一定Matlab编程基础,熟悉传感器原理和滤波算法的高校研究生、科研人员及从事自动驾驶、机器人导航等相关领域的工程技术人员。; 使用场景及目标:①学习和掌握多传感器融合的基本理论与实现方法;②应用于移动机器人、无人车、无人机等系统的高精度定位与导航开发;③作为EKF算法在实际工程中应用的教学案例或项目参考; 阅读建议:建议读者结合Matlab代码逐行理解算法实现过程,重点关注状态预测与观测更新模块的设计逻辑,可尝试引入真实传感器数据或仿真噪声环境以验证算法鲁棒性,并进一步拓展至UKF、PF等更高级滤波算法的研究与对比。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小山研磨代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值