BiliBili Android第三方——第1步
Android开发新手,若有错误请指出,谢谢~
架构选型
个人感觉现在的软件开发已经主要靠合理的利用、组合各种轮子来满足业务需求(没有轮子就要自己造轮子)。
我使用的是 Retrofit + Fresco + RxJava + ButterKnife + Gson,相信Android开发人员对这些第三方库都很熟悉,如果技能树点的时其他路线的可以看这篇文章。
网络请求
Retrofit的使用对于如今大行其道的RESTFUL的API来说简直就是舒服的不能再舒服了,记得在某处看到过一句话:
如果后台使用标准的Restful API,那么使用Retrofit来处理网络请求,网络请求相关的代码量将减少80%
Android网络请求库根据谷歌官方推荐即可,前段时间是Volley,现在是okHttp,使用Retrofit时默认选取okHttp作为底层网络请求实现。
图片加载
图片加载库算是比较难以取舍的,之前流行的是UIL,而现在是Glide、Picasso和Fresco,在本人的Github库中使用后三者方式加载图片,可以看出三种都能较好满足需求,但同时也能明显感觉到Fresco的响应最快,并且Fresco支持的功能最多。有利就会有弊,Glide和Picasso都是可以直接依赖普通的ImageView进行使用,而Fresco则需要使用其自定义的SimpleDraweeView及其相关属性对ImageView进行操作,如scaleType等属性。对于没有特殊要求或限制的项目,本人建议使用Fresco作为图片加载库。
RxJava
使用RxJava处理复杂的异步逻辑可以说是异常的舒服,看着之前用Handler实现功能的代码简直惨不忍睹。以一个简单的Banner(图片轮播)为例,使用RxJava实现无论从代码量还是逻辑上都是更加精简、清晰。使用timer、map、flatMap等各种操作符,非常容易实现想要的异步功能。其实之前的网络访问、图片加载只需要自己封装一层,即可按照自己舒服(习惯)的方式进行操作,而RxJava则是一种独立的编程风格,刚开始接触可能还需要适应一段时间,本人用了2个月感觉仍在磨合期,但却是义无反顾的推荐用其处理异步逻辑。并且,RxJava可以和Retrofit无缝链接,直接异步请求接收数据,回调后进行一系列的异步处理,并能够智能各处理步骤所处的线程,UI的归UI、计算的归计算、IO的归IO,大大提升App的流畅度。
其他使用
- ButterKnife的功能很单一,就是通过自定义注解的方式绑定控件ID、点击事件等,但却非常好用,配合Android Studio的插件,几乎是最常用的操作之一。
- Gson作为google官方的json解析库,灵巧好用,无副作用。json解析库无论选择哪种感觉都可以充分满足需求。
- RecyclerView已经可以完全替代ListView和GridView,现在项目中所有列表的实现都可以基于RecyclerView。
未使用
- EventBus 事件总线 未详细了解,不评论
- Dagger2 依赖注入 未详细了解,不评论
- MVP/MVVM 不喜欢(个人观点),与后台千篇一律的逻辑不通(数据库 + 增删改查 + 组合业务逻辑),App中有许多比较特殊的用户交互,而使用MV*这种形式确实可以规范代码,但其带来的大量的中间层代码(冗余的文件、类、方法)是我极为排斥的。Android本身的Activity、Fragment、View、Adapter只要合理组织、运用,一样能够实现较好的易维护的代码。
总结
个人对架构的理解、甚至对编程的理解就是尽量少写代码,或者短期内看上去会增加些代码量,但长期会减少正体的代码量。目前,Android开发仍是软件开发最热的部分之一,虽然已有许多成熟的框架给我们使用,但仍有更大量的需求待大家完善、开发(指开源、成熟的解决方案),如复杂动画的实现。本篇文章主要介绍自己在这个项目中使用到的第三方库,希望能够帮助大家。