有没人来试试我撸的一套单 Activity 方案(不用 Fragment 和 Navigation Component) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qiibeta
V2EX    Android

有没人来试试我撸的一套单 Activity 方案(不用 Fragment 和 Navigation Component)

  •  
  •   qiibeta 2019-10-22 12:26:42 +08:00 14846 次点击
    这是一个创建于 2260 天前的主题,其中的信息可能已经有所发展或是发生改变。
    仓库地址 https://github.com/bytedance/scene

    不要吐槽名字,当时是实在想不到好名字了就沿用 Scene 这词

    当时开始写的时候,还没 Navigation Component,后来写着写着,感觉比 Navigation Component 好用些,代码直接 push/pop 就可以打开关闭新页面,动画是可以拿到前后 2 个页面的 View,随便你做动画,比如 Navigation Component 只能用 R.animation R.animator 要方便,也有完善的共享元素动画实现,还有类似 iOS Interactive Animation 的机制(右划返回就是最普通的一种 iOS Interactive Animation ),可以关闭状态销毁恢复,这样直接构造方法传递 Callback,也方便了 Dagger 来进行构造方法依赖注入,支持多导航栈,每个 Tab 一个导航栈。Scene 本身导航栈的操作也比普通的 Activity 多的多。类似 Activity Router 的库也在开发中

    add/remove/show/hide 立刻执行了局部组件的操作,没有什么 commit/commitNow 的区别。有各种跟 ViewPager/NavigationView/BottomNavigationView 搭配的工具类 API,而且不同于 Navigation Component 用 Fragment 模拟,Bytedance Scene 是有半透明的概念,可以直接做成 Dialog (只是我现在没时间封装一套 Material Dialog 的 API ),我印象里面 Fragment 是没法做到半透明只触发 onPause 不触发 onStop 的(应该没记错吧)

    现在 Android 上的类似方案,除了官方的 Fragment/Navigation Component,就是 Flow,Conductor,前者已经不维护了,后者的生命周期和动画我之前测过有些问题的。Bytedance Scene 这个库,其实抄 /借鉴 /学习 /模拟 /复制了太多同类的库的设计,从 Activity,Fragment,Flow,Conductor,Flutter 的导航栈的 API,iOS UINavigationController 动画的 API,还有些功能还没抄完(比如 WinRT Page,限制导航栈在多少个页面内的 API )。

    现在已经跑在两个挺大的项目里面,应该没啥严重问题。

    可以跑仓库里的 demo 玩一玩
    22 条回复    2019-10-23 11:52:11 +08:00
    lizhuoli
        1
    lizhuoli  
       2019-10-22 12:35:08 +08:00 via iPhone
    竟然是 ByteDance 的 GitHub Orgnazation……我也有一些个人的 iOS 相关 Repo,感觉看看啥时候能挂几个
    fieldIO
        2
    fieldIO  
       2019-10-22 12:57:29 +08:00
    支持
    kile
        3
    kile  
       2019-10-22 13:08:36 +08:00   2
    字节跳动...

    作者娓娓道来仿佛像是随手开发的库一样...
    yicong135
        4
    yicong135  
       2019-10-22 13:37:09 +08:00
    demo 下载地址是字节跳动官网?
    nicevar
        5
    nicevar  
       2019-10-22 15:47:27 +08:00
    稍微看了一眼,有点像游戏框架,有兴趣的个人小应用可以吃吃螃蟹,没做性能之类测试,不丢几个大点 demo 或者应用上来估计没有什么吸引力,要不然很容易用着用着就变成改 bug 了。。。
    qiibeta
        6
    qiibeta  
    OP
       2019-10-22 16:40:05 +08:00
    @lizhuoli 因为是公司的代码……如果挂自己 github 下面怕不是想被开除
    mmrx
        7
    mmrx  
       2019-10-22 16:41:23 +08:00
    页面跳转竟然是 push(xxx.class)...
    mmrx
        8
    mmrx  
       2019-10-22 16:47:16 +08:00
    对于互不依赖的两个功能 module 之间的页面跳转,怎么搞...
    感觉和好几年前提出来的“组件化”背道而驰 ,不清楚楼主说的两个挺大的项目是不是也挺老了,因为我上家公司的项目也是这个思想,但是是七八年前的框架了
    qiibeta
        9
    qiibeta  
    OP
       2019-10-22 16:48:41 +08:00
    @nicevar 确实啊,没啥名气没啥来头没啥用户量的库最好别引入生产环境,毕竟各种开源库各种坑。这个库,现在跑在西瓜视频和抖音上,暂时还行吧,虽然我也没法保证不出 bug
    qiibeta
        10
    qiibeta  
    OP
       2019-10-22 16:50:26 +08:00
    @mmrx 互不依赖的功能 module 还能怎么搞,不就是弄个 router 建个 map,用 url 拿 class 吗,这跟这个库没啥冲突
    cnlyon
        11
    cnlyon  
       2019-10-22 16:52:21 +08:00
    smartisan os ?
    mmrx
        12
    mmrx  
       2019-10-22 17:00:10 +08:00
    @qiibeta 是我没表达清楚,我是想说如果能再提供上路由的实现,你这个库可能会有更多人用
    qiibeta
        13
    qiibeta  
    OP
       2019-10-22 17:09:40 +08:00
    @mmrx 嗯,已经在开发中了
    nicevar
        14
    nicevar  
       2019-10-22 17:26:20 +08:00
    @qiibeta 跑在西瓜视频和抖音上那应该还可以了,主要是之前单 Activity+多 Fragment 把很多人带进坑里了
    janrone
        15
    janrone  
       2019-10-22 18:29:54 +08:00   1
    @qiibeta 提代码的第一天就发现了, 好久不见了大佬, 四次元 。
    nimdanoob
        16
    nimdanoob  
       2019-10-22 18:39:15 +08:00
    @nicevar 抖音 准备用这套方案来替换了吗?
    751762476
        17
    751762476  
       2019-10-23 10:06:48 +08:00
    不错。我用的 conductor,没发现你说的坑啊
    nicevar
        18
    nicevar  
       2019-10-23 11:16:05 +08:00
    @nimdanoob 应该不会,这个方案应该只用在部分场景,有些场景并不太适用,比如稍微复杂的外部调用,前段时间看过抖音的版本,activity 多得超出你的想象,可能是他们自己挖的坑太深了,所以楼主弄出了这个方案来填坑。
    qiibeta
        19
    qiibeta  
    OP
       2019-10-23 11:21:00 +08:00
    @janrone 嘿嘿,竟然还有人记得这个 App
    qiibeta
        20
    qiibeta  
    OP
       2019-10-23 11:21:40 +08:00
    @nimdanoob 部分页面啦,至于以后会怎么样,说不好
    qiibeta
        21
    qiibeta  
    OP
       2019-10-23 11:26:06 +08:00
    @751762476 我记忆已经模糊了,我印象里面曾经测试过,比如 A 页面打开 B 页面,B 页面在自己的生命周期方法内打开 C 页面,当时我测下来,发现 B 的生命周已经错了。我当时还测过共享元素动画,那个时候 Fragment 自己的共享元素动画也是有问题的,因为 transition-support 这个包的实现就有坑,但是我现在已经记不清当时的细节了(也有可能我用的姿势不对?)。
    751762476
        22
    751762476  
       2019-10-23 11:52:11 +08:00
    @qiibeta 目前项目中没遇到你说的问题。不过基于 view 的单 activity 的库不多,conductor 更新的也不勤快,下次就试试大佬的库~~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     935 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 19:32 PVG 03:32 LAX 11:32 JFK 14:32
    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