Android 使用单 Activity 多 Fragment 的框架的实现思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wecodexyz
V2EX    Android

Android 使用单 Activity 多 Fragment 的框架的实现思路

  •  
  •   wecodexyz 2018-03-23 17:21:46 +08:00 18374 次点击
    这是一个创建于 2809 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 Android 开发中,传统的做法是一个页面一个 Activity,
    这样做跳转逻辑简单清晰,但是 Activity 的开销也比较大,
    故目前单 Activity 多 Fragment 的开发模式越来越流行。
    有没有比较好的框架或思路可以推荐
    19 条回复    2021-05-10 17:53:13 +08:00
    HongJay
        1
    HongJay  
       2018-03-23 17:32:21 +08:00
    铜球
    nicevar
        2
    nicevar  
       2018-03-23 18:07:16 +08:00
    这种架构用过度了容易把用户赶跑。。。知乎就是这样的
    ttentau1
        3
    ttentau1  
       2018-03-23 18:08:30 +08:00 via Android
    wecodexyz
        4
    wecodexyz  
    OP
       2018-03-23 18:29:06 +08:00
    @nicevar 为什么呢
    justinwu
        5
    justinwu  
       2018-03-23 18:39:29 +08:00 via iPhone
    我试过用 fragment,挺灵活的,既能分解复杂 activity,也能实现同 activity 内容切换,fragment 也可在不同 activity 中复用。

    至于框架啥的?不知道有啥框架,这个本身就是 ui 框架啊
    shnoparty
        6
    shnoparty  
       2018-03-23 19:04:51 +08:00 via iPhone
    见 Jake wharton 大神关于此的概述吧 medium 上 看过一篇文章 一个 app 只用一个 activity
    hqdmy
        7
    hqdmy  
       2018-03-23 19:06:06 +08:00
    就这点需求用不着框架啊.
    mmdsun
        8
    mmdsun  
       2018-03-23 19:08:20 +08:00 via Android
    没发现啥框架。可以自己封装一个 TabActivity.抽取公共方法。我都一般用 android studio 那种 tabllayout 模版
    DeweyReed
        9
    DeweyReed  
       2018-03-23 19:33:17 +08:00
    传统的做法不是一个页面一个 Activity,而是一个逻辑一个 Activity。
    多 Fragment 越来越流行了吗?好处说不出几个,坏处我倒是能说好几个。lifecycle 更复杂,retain 保存数据坑很多..
    crayygy
        10
    crayygy  
       2018-03-23 20:34:14 +08:00 via iPhone
    我没觉得为了节约 Activity 创建时间而强行单 Activity 多 Fragment 的架构有多好,仅个人看法。

    我们目前的做法是多对多的,根据功能不同来划分,并且兼顾手机和平板,在不同的布局有不同的实现。虽然在有些地方由于一些特殊的事件监测使得层级架构有点变得复杂了,但是维护起来还是比较方便的
    palxie
        11
    palxie  
       2018-03-23 21:14:07 +08:00
    notreami
        12
    notreami  
       2018-03-23 22:24:45 +08:00   2
    先说下,这个不是框架,只是一种项目约定实现方式,就像 java 后端的流程化思路。
    单 Avtivity 多 Fragment 的思路,3 年前我就实践了,说下当时总结的好处和坏处:
    好处:
    1、清内存后恢复,界面后退的过场动画不会丢失,而且更容易控制切换动画。
    2、Fragment 不用注册,打成 jar,直接加载就可以,热加载、热更新是非常简单方便(曾出现过某个 Fragment 不停的 crash,花了 1 小时改好,再推送出去,crash 解决了)。
    3、一个界面里玩多个 Fragment,有更强的切换控制和更多更棒的效果实现。
    坏处:
    1、需要折腾一个 Fragment 管理器,各种相互切换、相互消息传递、层层 Fragment 穿透等。尤其那种多层 Fragment 动态嵌套加载。
    2、硬件的问题,再次问候国产几家生产低端机的资本家,多个 Fragment,显示残影、刷新卡顿、响应缓慢等。


    总结下:单 Activity 多 Fragment 的方式,可行,但是少量 Activity 超多 Fragment 的方式更棒。

    然而,这只是 UI 上的实现约定,还有很多地方需要探索,比如(三年前了解的,现在估计已经变天了) EventBus、RxAndroid,响应式、动态埋点、无 UI 测试等等。以及直接上 webapp ( webapp 的出现,让我彻底觉得 android 开发受到了危险,简单无特别效果的,webapp 就可以了。复杂类似游戏的,直接上 C/C++,android 开发只剩下一个壳子而已)
    huclengyue
        13
    huclengyue  
       2018-03-23 23:28:44 +08:00 via Android
    我记得有个框架,实现了这个需求的。
    hyyou2010
        14
    hyyou2010  
       2018-03-23 23:30:35 +08:00
    这个 单 Activity 多 Fragment 是指什么?指一个 Activity 里面容纳多个 Fragments,还是指在 manifest 里面只定义一个 Activity,每次界面都使用这一个 Activity 去套某一个 Fragment ?
    Email
        15
    Email  
       2018-03-24 03:57:10 +08:00 via Android
    Instagram 了解一下,他们的 App 就是单 Activity 架构的。
    daxingzhesun
        16
    daxingzhesun  
       2018-03-24 09:05:30 +08:00
    喔,这么多 Androider
    zj299792458
        17
    zj299792458  
       2018-03-24 17:41:11 +08:00
    iOS 可以看成是没有 activity 全部 fragment 吧,开发起来还是感觉安卓界面坑多
    rb6221
        18
    rb6221  
       2018-03-26 16:06:21 +08:00
    没听说过「越来越流行」的说法
    qiumaoyuan
        19
    qiumaoyuan  
       2021-05-10 17:53:13 +08:00
    我看现在的教材好像建议直接单 Activity 多 Fragment 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5255 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:47 PVG 13:47 LAX 21:47 JFK 00:47
    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