Android框架搭建1-架构选型

前言

  • Q:我们在Android开发中,为什么需要搭建框架?

这个问题,想必有很多新手会问,当然也包括以前的我。为什么需要框架?搭建一个框架有什么好处?

我们带着这个问题开始探讨......

如果没有使用框架,我们的应用中可能会这样:
  • Activity中,一堆的控件声明和findViewById,或者ButterKnife的一堆BindView,或者两者混合,没有统一规范。且Activity里代码又臭又长,有控件数据绑定、有业务逻辑、有事件处理等等。

  • 网络请求,有些地方使用HttpUrlConnection,有些地方使用Okhttp,且每个网络请求都要写一堆回调处理、异常处理,并且不同网络库处理还不一样。

  • 权限申请的代码分布在项目的各个角落,若需要修改权限请求方式,需要一个个搜索、修改,还可能会遗漏

  • 操作数据库的代码有的在主线程,有的在子线程,且数据库有字段修改,可能造成获取数据异常

  • 等等......

因此我希望搭建一个框架,可以:
  • 不写FindViewById

  • Activity和Fragment只处理ui交互事件,不关心业务逻辑,不处理业务数据

  • 网络请求有统一的异常处理,能自动转换成我需要的数据类型

  • 数据库自动转换成我需要的实体类,不关心如何转换、游标需不需要关闭等问题

  • 数据变化自动更新到ui

  • 等等...

简单点说,一切为了快速开发,就是尽可能地少写代码,把重复工作交给框架,这样能减少很多代码量,同时也比较不容易出错(只要框架不出错)。

那么问题来了,如何搭建框架呢?且听我慢慢说

一、语言选型

语言方面,Android开发考虑两种语言:Java和Kotlin,Java想必是所有Androider都会使用的语言了,但这里我推荐用Kotlin,为什么呢?

自Google IO 2017以来,Kotlin被Google爸爸列为Android开发一级语言后,Github上越来越多的开源库都开始使用Kotlin来编写,甚至Google Developer官方教程中,也使用Kotlin来编写demo。

Kotlin有什么优势:

  • 可以从Java无缝过渡,Kotlin完全兼容Java,你可以完全使用Kotlin开发,也可以Kotlin和Java混合使用

  • 语法简洁,相同逻辑的代码,在不失语义的前提下,Kotlin可以做到比Java更加简洁,代码量更少

  • 空指针安全,Kotlin提供安全的空值访问,在编码期间解决变量空值问题

  • 扩展函数,Kotlin使用扩展函数在旧的类中添加新的扩展方法,例如:在String中添加日期转换方法

  • 更好用的数据类,不用再写getter/setter等一大堆又臭又长的代码

  • 等等......

简单点说就是,Kotlin比Java好用些,并且如果你不怎么会Kotlin,你可以一边写Java,一边写Kotlin,渐进地转换到Kotlin开发,反正它们俩是兼容的。

二、基础架构选型

在Android界,我的思想是:面向Google编程,简单点说,就是Google爸爸推荐用什么库,我就用什么库,Google爸爸就是Androider的模板。

Google爸爸的Android开发者中文页面:developer.android.google.cn

为了构建更加健壮,用户体验更好的App,我们要用到Google爸爸这些个库:

  • Support系列。包括support-v4、support-appcompat-v7、support-design、support-constraintlayout等等,Support系列包是Google推出的一些列兼容包,使用这些库开发Android App,可以获得更好的兼容性、健壮性和性能

  • Architecture components系列。Google IO 2018推出了一些列全新的开发工具包,Architecture components就是其中一个,它包括Data Binding、LifeCycle、ViewModel、LiveData、Room、WorkManager、Navigation等一系列库,从生命周期到数据库到线程工作等等。

三、开发模式选型

MVC、MVP、MVVM,这三种开发模式,想必是大家看到过最多的开发模式了,关于这三种开发模式的介绍,网上的资料多如牛毛,这里就不多赘述,主要分析一下各自的优缺点,以供选型参考:

  • MVC:将一个软件结构分为Model-View-Controller三层,将视图层和业务层做了分离。
    缺点:在早期Android中,Activity/Fragment既是View层又是Controller层,View层与Model层直接通信,代码相对臃肿,耦合度较高。
  • MVP:软件结构为Model-View-Presenter三层,其中View层不直接与Model层通信,而是通过Presenter层去调用Model层的逻辑,同时通过Presenter取得Model返回的数据。一般来说,Activity作为View,只处理UI逻辑,View、Presenter、Model层均使用接口来解耦,相对MVC来说,耦合程度低,易于测试。
    缺点:大大增加了代码量,每个页面View、Presenter、Model都需要定义接口,且Presenter不易复用。
  • MVVM:软件结构为Model-View-ViewModel,其中View层只关心ui交互,ViewModel层负责处理业务逻辑,使用databinding或者LiveData自动将数据变化响应到ui界面。相对于MVP来说,耦合程度更低,View和ViewModel层都更容易测试,同时,减少了MVP中的大量样板代码,更加简洁清晰 因此,开发模式部分,我们选择MVVM作为我们的主要开发模式。

四、其他架构选型

诸如网络请求、图片加载、缓存、路由......等等,篇幅考虑,将在后续文章中说明。

关注微信公众号:Android必修课

涨知识? 学技能? 装逼?

来这里,给你想要的答案

转载于:https://juejin.im/post/5b93aa3fe51d450e935c158b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值