单 Activity 架构组件
2018-01-16 13:13 阅读(290)

单 Acvitivy 架构是指整个应用只有一个 MainActivity, 可能还有个 SplashAcvitiy 来作为闪屏。笔者有个项目比较特殊,必须用单 Activity 来实现。单 Activity 架构的一个挑战就是需要处理好 Fragment 的嵌套问题,曾经有最佳实践明确指出,尽量不要嵌套使用 Fragment。

但是,随着 google 对 Fragment 相关 api 的完善,这一戒律已经过时。

笔者到 google 上一搜,也有不少文章或开源库讲单 Activity 架构的哦

知乎团队:Single Activity Multiple Fragments Architecture

Modern Android: Ditching Activities and Fragments

因为其他同学可能也对单 Activity 架构感兴趣,因此笔者从项目中抽离出了这个子项目,专门用来处理单 Acvitity 架构的问题。

由于笔者也做了几年的 iOS 开发,而 iOS 的导航系统是比较完善的。因此这个单 Activity 架构组件的设计参考了 iOS 的导航系统。

在 iOS 中,只有一个 keyWindow,它可以设置一个 rootViewController,这个 rootViewController 可能是一个容器,里面包含着其它 UIViewController, 而被包含的 controller 可能也还是个容器。也就是说,在 iOS 中,控制器是一层套一层的。

碰巧,在 Android 中,Activity 也是一个 Window,Activity 也可以设置 Fragment, Fragment 也可以嵌套,感觉就是异曲同工啊。

所以呢,笔者就照着 iOS 的样子,实现这个组件

Compare with iOS

AndroidNavigationiOS
AwesomeActivityWindow
AwesomeActivity#setRootFragmentWindow#rootViewController
AwesomeFragmentUIViewController
NavigationFragmentUINavigationController
TabBarFragmentUITabBarController
DrawerFragment-

特性

第三第四点尚未完全实现,仍在开发中

截图

如果你身边有同学也对单 Activity 架构感兴趣,那么推荐给他吧。

源码地址


作者:非非白
链接:https://juejin.im/post/5a5c57f96fb9a01cb1391dcb