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

2019-10-22 12:26:42 +08:00
 qiibeta
仓库地址 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 玩一玩
11977 次点击
所在节点    Android
22 条回复
lizhuoli
2019-10-22 12:35:08 +08:00
竟然是 ByteDance 的 GitHub Orgnazation……我也有一些个人的 iOS 相关 Repo,感觉看看啥时候能挂几个
fieldIO
2019-10-22 12:57:29 +08:00
支持
kile
2019-10-22 13:08:36 +08:00
字节跳动...

作者娓娓道来仿佛像是随手开发的库一样...
yicong135
2019-10-22 13:37:09 +08:00
demo 下载地址是字节跳动官网?
nicevar
2019-10-22 15:47:27 +08:00
稍微看了一眼,有点像游戏框架,有兴趣的个人小应用可以吃吃螃蟹,没做性能之类测试,不丢几个大点 demo 或者应用上来估计没有什么吸引力,要不然很容易用着用着就变成改 bug 了。。。
qiibeta
2019-10-22 16:40:05 +08:00
@lizhuoli 因为是公司的代码……如果挂自己 github 下面怕不是想被开除
mmrx
2019-10-22 16:41:23 +08:00
页面跳转竟然是 push(xxx.class)...
mmrx
2019-10-22 16:47:16 +08:00
对于互不依赖的两个功能 module 之间的页面跳转,怎么搞...
感觉和好几年前提出来的“组件化”背道而驰 ,不清楚楼主说的两个挺大的项目是不是也挺老了,因为我上家公司的项目也是这个思想,但是是七八年前的框架了
qiibeta
2019-10-22 16:48:41 +08:00
@nicevar 确实啊,没啥名气没啥来头没啥用户量的库最好别引入生产环境,毕竟各种开源库各种坑。这个库,现在跑在西瓜视频和抖音上,暂时还行吧,虽然我也没法保证不出 bug
qiibeta
2019-10-22 16:50:26 +08:00
@mmrx 互不依赖的功能 module 还能怎么搞,不就是弄个 router 建个 map,用 url 拿 class 吗,这跟这个库没啥冲突
cnlyon
2019-10-22 16:52:21 +08:00
smartisan os ?
mmrx
2019-10-22 17:00:10 +08:00
@qiibeta 是我没表达清楚,我是想说如果能再提供上路由的实现,你这个库可能会有更多人用
qiibeta
2019-10-22 17:09:40 +08:00
@mmrx 嗯,已经在开发中了
nicevar
2019-10-22 17:26:20 +08:00
@qiibeta 跑在西瓜视频和抖音上那应该还可以了,主要是之前单 Activity+多 Fragment 把很多人带进坑里了
janrone
2019-10-22 18:29:54 +08:00
@qiibeta 提代码的第一天就发现了, 好久不见了大佬, 四次元 。
nimdanoob
2019-10-22 18:39:15 +08:00
@nicevar 抖音 准备用这套方案来替换了吗?
751762476
2019-10-23 10:06:48 +08:00
不错。我用的 conductor,没发现你说的坑啊
nicevar
2019-10-23 11:16:05 +08:00
@nimdanoob 应该不会,这个方案应该只用在部分场景,有些场景并不太适用,比如稍微复杂的外部调用,前段时间看过抖音的版本,activity 多得超出你的想象,可能是他们自己挖的坑太深了,所以楼主弄出了这个方案来填坑。
qiibeta
2019-10-23 11:21:00 +08:00
@janrone 嘿嘿,竟然还有人记得这个 App
qiibeta
2019-10-23 11:21:40 +08:00
@nimdanoob 部分页面啦,至于以后会怎么样,说不好

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

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

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

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

© 2021 V2EX