V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qiibeta
V2EX  ›  Android

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

  •  
  •   qiibeta · 2019-10-22 12:26:42 +08:00 · 11603 次点击
    这是一个创建于 1881 天前的主题,其中的信息可能已经有所发展或是发生改变。
    仓库地址 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   ·   实用小工具   ·   2460 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:31 · PVG 22:31 · LAX 06:31 · JFK 09:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.