单 Activity 架构组件

5,764 阅读2分钟

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

笔者到 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

AndroidNavigation iOS
AwesomeActivity Window
AwesomeActivity#setRootFragment Window#rootViewController
AwesomeFragment UIViewController
NavigationFragment UINavigationController
TabBarFragment UITabBarController
DrawerFragment -

特性

  • 一行代码实现 Fragment 嵌套,一次性构建好嵌套层级
  • 一行代码实现 Fragment 跳转,不再需要写一大堆操作 fragment 的代码了,不用担心用错 FragmentManager 了
  • 一行代码开关沉浸式状态栏,兼容到 Android 4.4 并解决了相关 BUG
  • 自动为你创建 Toolbar,一行代码设置标题、按钮,支持关闭自动创建功能以实现定制
  • 一处设置全局样式,到处使用,并且支持不同页面个性化
  • 支持 font icons

截图

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

源码地址