专栏名称: 非非白
目录
相关文章推荐
中国化学  ·  印尼首个纯碱项目落地!Pupuk ... ·  15 小时前  
知识星球精选  ·  小编节后已下岗,本文完全由DeepSeek生 ... ·  昨天  
贵阳市场监管  ·  电费1个月3481元竟有电费刺客?真相是... ·  2 天前  
贵阳市场监管  ·  电费1个月3481元竟有电费刺客?真相是... ·  2 天前  
猪价日记  ·  油价下跌“势如破竹”!2月2日调整后92,9 ... ·  4 天前  
吉林市场监管  ·  这种瓜子有毒还致癌,吃到了立马吐出来! ·  4 天前  
51好读  ›  专栏  ›  非非白

单 Activity 架构组件

非非白  · 掘金  ·  · 2018-01-15 08:24

正文

单 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

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

特性

  • 使用 Lifecycle 架构组件,解决了生命周期问题
  • 以 iOS 的导航系统为参照,因为 iOS 的导航系统设计得比较完善,支持 push, pop, popTo, popToRoot, present, dismiss, replace, replaceToRoot 等操作
  • 支持 StatusBar, ToolBar, BottomBar 的全局样式配置以及局部调整
  • 支持 vector fonts

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







请到「今天看啥」查看全文