Activity与Fragment的适用性

本文探讨了Activity与Fragment的区别和适用性,指出Activity功能更强大,Fragment更专注于UI模块化。适合使用Fragment的情况包括:设备适配、单任务栈场景、无需Activity独特功能以及为维护和拓展做准备。Activity则适用于需要隐式启动、处理复杂启动模式和跨进程通信的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先引一篇比较能引发人思考的知乎帖子

https://www.zhihu.com/question/39662488/answer/82469372

因Fragment的基础知识网上较多,现在就不想花时间去写了,看下面链接的两篇文章

http://www.mamicode.com/info-detail-612467.html

http://www.cnblogs.com/shaweng/p/3918985.html 

以下是我个人的一些观点,由于对于Fragment实践不算多,对AMS,Activity和Fragment的源码理解有限,下面所述不一定正确,仅供备忘和讨论。


首先,Activity确实是比Fragment要重,这是因为Activity比Fragment要更加强大,承担更多的任务,有些事情是Fragment无法办到的。

比如:

1.使用隐式启动某个Activity及其界面(让第三方启动比然是隐式调用),

2.Activity中有许多属性,例如启动模式,meta-data定义,theme定义主题风格,让一个Activity在另外一个进程运行

3.启动时设置标志位(FLAG_ACTIVITY_NEW_TASK等);intentFilter的功能,可以让自己应用或者第三方应用去

  根据不同的多媒体数据类型去启动不同的Activity

4.Fragment的切换是Activity在管理,协调被隐藏的Fragment和启动Fragment的生命周期的管理,它们是在同一个

   进程中。而Activity的切换可能会涉及到跨进程的情况,涉及到跨进程通信,需要依赖AMS作为切换调度者。

综上所述

* fragment不是万能的,Activity不是一无是处的。职责不一样,fragment的职责相对于Activity是单一的,简单很多,

   因为fragment的初衷就是如其名将ui和UI上的交互处理模块化,便于各种分辨率和各种大小不一Android设备

   可以更好的使用同一套代码。

* Activity作为触摸/按键的顶级分配者(对用应用开发者),需要处理contentView不处理的事件。

* Activity作为rootView的持有者,如果不是为了重用性,即与Activity解耦,即把UI和事件处理独立出来,

  解耦是为了维护方便,便于升级和拓展,若没有太大的拓展的可能(在可预见的未来),还是直接使用

   rootView更加高效,体现在代码运行效率,开发时间和维护看代码更直接,不用花很多事件去设计

  和看绕来绕去的层层调用,就像设计模式,不是非得用,有优势,有缺点,看情况而定。


哪些时候是比较适合适用fragment的呢

比如:

1.

如上图这种情况,用两个fragment封装两个界面模块,可以使一套让两种设备重用这两个界面的代码。

2.使用一个Fragment代替一个Activity的情况,就是单任务栈的(如果需要单独在一个task的,则需要

   Activity的singleInstance或者FLAG_ACTIVITY_NEW TASK,或者指定一个askAffinity),不需要

   隐式启动的,不能使用强大的intentFilter去选择启动的页面。

3.确实没有使用到上述只有Activity能办到的功能(当然Fragment没有的,只有Activity有的强大功能

   不仅限于上述那些),那么可以考虑使用fragment来代替Activity,毕竟Fragment的创建和切换都

   是比Activity更加轻量级。

4.考虑到之后的拓展或者重用,需要将Activity和Activity中的某块view及该view的交互处理解耦的。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值