android 开发用 “单 activity 多 fragment” 还是 “多 activity 多 fragment” 还是 “主用 activity”?

2017-12-21 11:45:01 +08:00
 GuLuDaDuiZhang
我目前用“单 activity 多 fragment ”模式遇到些坑,网上找答案时偶然看到知乎上关于这个问题的讨论,于是开始纠结了。

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

因为本人是网上找资料自学,目前实习,但实战经验不足,所以想知道实际开发中大家是怎样选择的,最好能说一说思路。拜谢,感激不尽。
11189 次点击
所在节点    Android
32 条回复
YellowLittleDog
2017-12-21 11:51:50 +08:00
看需求吧,我 Android TV 项目开发,一个 activity 一个 fragment,上次别人说这是智障的做法。
KNOX
2017-12-21 12:00:56 +08:00
你遇到什么坑?知乎就是单 activity 多 fragment
nicevar
2017-12-21 12:12:36 +08:00
配合使用,具体还是得看需求和情况,有时候单个 Activity+多 Fragment 组合,有时候需要多 Activity,怎么方便怎么用,没有特别的规定
Fragment 一路上来很多坑的,内存泄露,内部状态异常,现在好多了,坑 google 填得差不多了,不过做 TV 开发还是要谨慎使用,Fragment 在不同系统版本上如果集成 gridView 焦点搜索和绘制表现不一致,具体记不太清楚了,应该是 4.4 版本前后差异
youngxhui
2017-12-21 12:15:46 +08:00
前两天某大神不是说一个应用只用一个 activity ?
GuLuDaDuiZhang
2017-12-21 12:16:07 +08:00
@YellowLittleDog 一个 activity 配一个 fragment 吗?这样感觉怪怪的,嵌套的 fragment 是不是要用来搞什么大事情。
看需求该怎么看呢,我现在都是无脑流单 activity,确实太死板了。
GuLuDaDuiZhang
2017-12-21 12:25:27 +08:00
@KNOX 就是摸索过程中常见的坑,用 fragment 显示布局时各种 null,回退呀和回退栈管理。
以前以为这模式是万金油的套路,现在才发现不是这样额。
nicevar
2017-12-21 12:35:30 +08:00
@GuLuDaDuiZhang 如果是复杂的项目,大的模块用单独的 Activity+Fragment 组合来做,简单关联性不强的模块就不要用单独的 Activity 了,毕竟 Activity 太重,写起来也麻烦,还得去 manifest 配置
别人的应用只能参考,知乎的 app 可以单 Activity 不代表你的就可以,具体看自己的应用设计
vjnjc
2017-12-21 12:37:04 +08:00
你要是新入手就直接 activity 吧。。。
activity 生命周期已经够负责了,fragment 更复杂。
最复杂的是单 activity 配合很多 fragment
GuLuDaDuiZhang
2017-12-21 12:41:06 +08:00
@nicevar 谢谢解答,关于需求和情况,能告诉我一些简单的例子吗。实习经验匮乏加上转行缺少编程思维,不知该怎么分析需求。如果能举例分析一下特定情况下哪种模式效率高以及为什么就最好啦。
GuLuDaDuiZhang
2017-12-21 12:45:03 +08:00
@youngxhui emm.意思是单 activity 靠不住吗。
GuLuDaDuiZhang
2017-12-21 12:57:37 +08:00
@nicevar 码完字回你第一条回复,才看到你第二条回复,尴尬。
这里简单关联性不强的模块,不用单独的 activity 是什么意思呀。
GuLuDaDuiZhang
2017-12-21 13:01:36 +08:00
@vjnjc 看来我一开始就选了一条长征之路啊。循环懵逼
hyyou2010
2017-12-21 13:29:34 +08:00
如果一个模块超重,那么就直接放 Activity 里面。如果一个模块今天放这明天挪那,你搞不清产品的想法,那么放进一个 fragment 里面。

fragment 的劣势在于,没有 context,有一个 attach 到 Activity 的过程,生命周期依附于 Activity 的周期。此外,接收 intent,接收 Activity 返回,设置 title、option menu 等等都麻烦一点。

我一般写一个专门的 Activity 用于装载任何一个 fragment,功能覆盖上面谈及的劣势。
20015jjw
2017-12-21 13:54:51 +08:00
@hyyou2010 我司也这样
simapple
2017-12-21 13:58:14 +08:00
能用就行 就多个 Activity,因为简单,相当来说 fragment,各自处理各自的 Activity
vjnjc
2017-12-21 14:37:07 +08:00
@GuLuDaDuiZhang 主要看需求,比如你需要 fragment 复用的话就只能 fragment 了,不然要写很多重复的 activity。。
kwanzaa
2017-12-21 15:27:01 +08:00
多 Activity,多 Fragment。
bhagavad
2017-12-21 15:30:28 +08:00
项目上其实不考虑那么多的,更多是从业务角度去看,如果一个页面中有某些业务不仅从 UI 上互不耦合,而且从逻辑上也不耦合,那就拆分开两个 Fragment,举个例子,比如直播的页面,一般下边的推拉流是一个单独的业务,上边的弹幕、礼物等又是一个单独的业务,那就拆分成两个 Fragment 好了,如果所有代码都放到一个 Activity 中,那代码就太多了。但是比如只是一个文本展示的页面,那就没必要用 Fragment,直接放到 Activity 里就好。

拆分的目的是使逻辑清晰、方便维护、提炼重复逻辑等。不要太局于书本,非要把两种情况对立化,在合适的场景下用更优的方式就好。
DeweyReed
2017-12-21 15:41:59 +08:00
个人偏好和习惯,以及项目需求啊。
Fragment 的 Lifecycle 的确复杂化了问题,但使用 ViewPager,PreferenceFragment 时也算方便。
完全不用 Fragment 也可以做到,我也见过单个 Activity,仅通过 View 实现 Master Detail Flow 的例子。
个人喜欢把逻辑上一块的东西放在一个 Activity 中,使用 Fragment 目的明确,代价比较小时才会用。
michaelye1988
2017-12-21 15:45:17 +08:00
我现在在写的项目使用一个 Activity+多个 Fragment。确实不少坑,Fragment 不好用,兼容包也很讨厌,但是觉得这样做还是更灵活的。生命周期的管理相对会简单一些,全局通知也简单一些,在任意一个 Fragment 里面 getActivity 得到的是一个全局的 Activity,感觉更方便了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/416486

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX