有没人来试试我撸的一套单 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 玩一玩
11946 次点击
所在节点    Android
22 条回复
qiibeta
2019-10-23 11:26:06 +08:00
@751762476 我记忆已经模糊了,我印象里面曾经测试过,比如 A 页面打开 B 页面,B 页面在自己的生命周期方法内打开 C 页面,当时我测下来,发现 B 的生命周期已经错了。我当时还测过共享元素动画,那个时候 Fragment 自己的共享元素动画也是有问题的,因为 transition-support 这个包的实现就有坑,但是我现在已经记不清当时的细节了(也有可能我用的姿势不对?)。
751762476
2019-10-23 11:52:11 +08:00
@qiibeta 目前项目中没遇到你说的问题。不过基于 view 的单 activity 的库不多,conductor 更新的也不勤快,下次就试试大佬的库~~

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

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

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

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

© 2021 V2EX