浅谈Android开发中项目的文件结构及规范化部署建议

2019-12-10 18:50:53于海丽

Activities和Fragments
Fragments应该是你在Android部署UI界面的默认选项。Fragments可以在你的应用里重用。我们推荐使用Fragements而不是 activities 来绘制界面基于以下几点:

  • 解决是多视图布局。Fragments被引入进来的主要原因是把手机应用程序拓展到平台电脑上,这样的话你在平板上可以同时显示A和B视图,而在手机上可只显示A或B。如果你的程序最开始就是使用Fragment来实现,那么你的程序可以更容易适用于多种设备。
  • 屏到屏的通信。Android的API并不提供一个合适的方式来实现Activity之间传递复杂数据(如Java对象)。但是,使用Fragment,你可以利用Activity来成为其子Fragment之间通信的通道。即使这比Activity-到-Activity通信要好不少,我仍然建议你采取Event Bus架构,例如使用Otto 或者 greenrobot EventBus来作为一个更简洁的方案。如果你不想采取附加的库,那么RxJava也可以被用来实现一个EventBus。
  • Fragment不仅仅可以用来布局UI。你可以添加一个 没有UI界面的Fragment 作为Activity的后台服务者。甚至你可以创建一个Fragment来实现Fragment切换逻辑,而不是让Activity去处理Fragment切换逻辑。
  • Fragment里甚至可以管理ActionBar。你可以选择一个没有UI界面的Fragment来专门管理ActionBar,或者你可以选择每个当前可视的Fragment自己来处理父Activity的ActionBar。参考这里。
  • 然后,我们也不建议过度使用嵌套Fragments,那可能导致matryoshka 漏洞。
  • 从架构的角度来考虑,你的应用应该有一个顶级Activity,它会包含大部分业务相关的fragments。你也可以创建一些其他的支持性Activities,只要它们与主Activity的通信保持简单--形似与 Intent.setData()或Intent.setAction()。

    Java包结构

    在Android应用程序里的Java结构接近MVC结构(Model-View-Controller)。在Android里,Fragment和Activity实际上都是控制器类。而从另一角度来看,他们又是用户交互的一部分,也就是说属于视图View类。
    因此,我们很难严格区分Fragment(或Activity)是控制器还是视图。所以从Java包角度来看,我们最好把Fragment放在它们自己的fragments包里,然后Activity放在最高级的包里面(遵循上文提出的建议)。当然,如果你想有2个或以上的Activity,那你就创建一个activitys包。