问一下大家, android 项目是使用单个 activity 好,还是用一个 activity 控制多个 fragment 好? 还有就是说一下各个的优劣势 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
WesleyNO1

问一下大家, android 项目是使用单个 activity 好,还是用一个 activity 控制多个 fragment 好? 还有就是说一下各个的优劣势

  •  
  •   WesleyNO1 Aug 31, 2017 18147 views
    This topic created in 3171 days ago, the information mentioned may be changed or developed.
    28 replies    2017-09-20 11:19:00 +08:00
    paragon
        1
    paragon  
       Aug 31, 2017   1
    看具体的交互逻辑~
    pcatzj
        2
    pcatzj  
       Aug 31, 2017   1
    想到了之前的一个项目,项目立项比较早。整个项目只有一个 activity,而且项目体量特别大,不同的界面切换全是通过在这个 activity 里动态添加删除 view 来完成。维护起来简直想死。
    WesleyNO1
        3
    WesleyNO1  
    OP
       Aug 31, 2017
    @paragon @pcatzj 很感谢,自己感觉这个应该分模块搞,比如一个 activity 负责一块的 fragment,但是同项目的一个同事非要一个 activity 加 N 个 fragment 实现所有,理由就是切换页面快,可复用,但我觉得这个有利有弊,所以到此来抛砖引玉,问问大神们的项目遇到这种情况怎么弄。
    jimmy
        4
    jimmy  
       Aug 31, 2017   1
    在我看来,如果 App 的界面没有各种组合的话,全部用 activity 做界面其实也没问题,不需要因为 Fragment 而 Fragment ;当然,如果 App 会根据横向纵向会产生不同的适配风格的话(比如两个 Fragment 组合起来),fragment 的优势就出来了,因为一个 Activity 可以管理多个 Fragment,可以把业务的颗粒度细化到一个合理的范围之内。
    torchmu
        6
    torchmu  
       Aug 31, 2017
    @torchmu 参考官方文档的场景。和 LS 观点一致,参考需求,不要过度使用 Fragment 实现。
    rb6221
        7
    rb6221  
       Aug 31, 2017   1
    现阶段还是推荐多 activity,你要为我为啥?因为 fragment 的坑有点多。官方自己也没给一个完美的解决方案
    Grubber
        8
    Grubber  
       Aug 31, 2017 via Android
    一个 activity 一个对应的 fragment
    KNOX
        9
    KNOX  
       Aug 31, 2017 via Android
    按业务逻辑来决定,避免全部都是 activity 或 fragment。
    RobertWu
        10
    RobertWu  
       Aug 31, 2017
    @pcatzj 很想知道之前在哪家公司
    pcatzj
        11
    pcatzj  
       Aug 31, 2017
    @RobertWu #10 自己在一个小公司,被外派到了一家大公司。
    saberpowermo
        12
    saberpowermo  
       Aug 31, 2017   1
    我们项目之前大胆尝试了 单 Activity 然后看到的基上所有页面都是 fragment
    其中的坑有多少 我就不细说了 说到明天天明都说不完
    我们 leader 的水平 我相信能进阿里 p7-8 附近 但是依然是填坑填到无奈。
    fragment 真的是半成品 当然只是个人看法
    kx5d62Jn1J9MjoXP
        13
    kx5d62Jn1J9MjoXP  
       Aug 31, 2017 via Android   1
    多 activity
    fragment 只在有较多页面元素需要重用的时候使用
    bkmi
        14
    bkmi  
       Aug 31, 2017 via Android   1
    跟你讲 微信的聊天页面就是 Fragment,目的就是要快速加载,另外 Telegram 客户端就是单 Activity 写的,当然优势也是加载快。
    至于坑肯定是有,比如比起 Activity 少了一些生命周期方法,比如 onActivityReenter, 我们的做法是通过基类传递,但我们目前还没碰到解决不了的。楼上 leader 那位,敢举个例子看看你们无奈的坑?@saberpowermo

    我的看法也是结合实际情况,合理利用就行,还有 8 楼的,一个 activity 对应一个 fragment 的做法,真的是傻,多余的圈圈。

    至于你说的,你们已经开始单 activity 了,那就放手干吧,踩坑过程中能学到不少东西。
    caixiangyu17
        15
    caixiangyu17  
       Sep 1, 2017   1
    fragment 可以用,但是不要嵌套,像楼上说的微信那种,主界面左右划用个 fragment 可以,但是点击单项内容就全都是 activity 了。还有 fragment 有时候数据处理要回到父类得 activity 里面弄, 如果太多了会很麻烦。建议用第三方的数据通讯类库。
    CFM880
        16
    CFM880  
       Sep 1, 2017   1
    只会在同一个页有多种不同的 UI 展示,才会用 Activity 动态添加多种不同 UI 模板的 Fragment ;涉及到跳转到下一页,就用 Activity
    kaminic
        17
    kaminic  
       Sep 1, 2017   1
    很久以前还没有 aar 格式的时候做 SDK,做成单 Activity 可以新增界面时不需要使用者每次修改 AndroidManifest.xml
    RobertWu
        18
    RobertWu  
       Sep 1, 2017
    @pcatzj 我司也是单 Activity
    XinLake
        19
    XinLake  
       Sep 1, 2017   1
    没有绝对的好或不好,那是一大桶。
    这个问题要看场景、架构,要随机应变。

    Activity 作为一个独立功能界面,有自己的输入信息输出信息。
    他可以出现在程序界面里,也可能被其他 Intent 调用。比如一个图片选择 Activity 返回一个选择列表,你自己的 App 逻辑可以调用,也可以 Handle 公共的 Pick Action。这个(一大桶) Fragment 无法替代也不适合使用的。

    再如这个图片选择的 Activity,图片的预览方式有几种像网格浏览(用 RecyclerView )、按相册折叠浏览(用 ExpendableListView ) ,这里头用 Fragment 就很方便,这时候(一大桶)用 Activity 反倒不好处理逻辑。
    WesleyNO1
        20
    WesleyNO1  
    OP
       Sep 1, 2017
    很感谢各位的回答,多谢多谢!!!


    PS:在知乎上也找到一个同样的问题 ( https://www.zhihu.com/question/39662488
    pcatzj
        21
    pcatzj  
       Sep 1, 2017
    @RobertWu #18 老项目吗?还是有什么特殊考量?
    AckywOw
        22
    AckywOw  
       Sep 1, 2017
    fragment 的意思是什么?碎片,所以这个问题不用继续了
    bkmi
        23
    bkmi  
       Sep 1, 2017 via Android
    @caixiangyu17 我说的微信不是指几个 tab 切换的页面,而是微信的聊天页面,是以 Fragment 附加在首页上的
    caixiangyu17
        24
    caixiangyu17  
       Sep 4, 2017
    @bkmi 感觉聊天页面看起来应该是个 activity 呀。你从左侧划关闭聊天界面的时候,看着挺明显的是两个界面呀。这种情况没有特殊需求完全没有必要用 fragment 吧?
    bkmi
        25
    bkmi  
       Sep 4, 2017 via Android
    @caixiangyu17 你看的只是 View,需求就是要快啊,复用组件,快速加载,看这篇文章: https://mp.weixin.qq.com/s?mid=207548094&idx=1&sn=1a277620bc28349368b68ed98fbefebe&__biz=MzAwNDY1ODY2OQ==
    caixiangyu17
        26
    caixiangyu17  
       Sep 4, 2017
    @bkmi 嗯好文章学习了,不过这的确是个特殊需求,一般情况下单 activity 就好了。
    canrom7
        27
    canrom7  
       Sep 4, 2017
    单 Activity 全部 fragment 实现。。
    zhuhaohenry
        28
    zhuhaohenry  
       Sep 20, 2017
    Google Play 不就是单 activity 吗
    About     Help     Advertise     Blog     API     FAQ     Solana     1035 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 63ms UTC 18:27 PVG 02:27 LAX 11:27 JFK 14:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86