# Fivestar_Lib **Repository Path**: fivestar/Fivestar_Lib ## Basic Information - **Project Name**: Fivestar_Lib - **Description**: 框架搭建 - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-08-22 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 库项目说明: 包含公共组件如:管理依赖库、网络层交互、数据库缓存、第三方UI控件 #### 架构模型:MVP 传统Android开发里,Activity或Fragment这一层太重了,因为它承担了和界面交互、和数据交互等等一系列职责,所以一个Activity搞不好就有好几千行,各种职责的代码混在一块,不利用维护。MVP模式其实更容易理解,它把整个应用分成了三块,其中M代表着操纵数据的一组API,而V代表着操纵界面的一组API,P是Presenter的简称,它持有M和V这两组接口,自己提供一组方法供其它人调用,从而完成M和V的桥梁作用。MVP这种模式分拆了Activity或者Fragment的职责,自己做中间层挡在了View和DataLayer之间,它的好处不仅仅是职责清晰,还具有可替换的好处,因为它和View之间的联系是通过接口来完成了,当你需要替换的时候,只需要按照同样的接口来实现即可。层级之间通过添加接口层作为分隔实现解耦。 **主框架:Retrofit2 + RxJava + Dagger2** **MVP 特点**: - 解耦,降低模块耦合度。 - 可以更方便的写单元测试。 - 减少Activity编码 - 提高团队协作的效率 - 提高编码的效率 - 提高代码的可读性 - 易于快速迭代,基于代码的低耦合,只需在业务逻辑上增加接口,然后在相应的层级分别实现即可,丝毫不影响其他功能。 要点包含: * 链式表达式的使用方式. * Lambda的应用. * Rx处理网络请求. * 线程自动管理, 防止内存泄露. #### 框架选择分析: http://www.jianshu.com/p/f3227c7008d4 ###### 网络请求:Retrofit2 + okhttp http://www.jianshu.com/p/45cb536be2f4 Retrofit2: 由Square公司出品的针对于Android和Java的类型安全的Http客户端, 使用面向接口的方式进行网络请求,利用动态生成的代理类封装了网络接口请求的底层. 1. 性能 比较AsyncTask、Volley、Retrofit三者的请求时间 ``` |使用 | 单次请求 | 7个请求 | 25个请求 | | --- | --- | --- | --- | AsyncTask | 941ms | 4539ms | 13957ms Volley | 560ms | 2202ms | 4275ms Retrofit2.0 | 312ms | 889ms | 1059ms ``` 2. 扩展 可以帮我们将获取到的数据转换为JAVA BEAN,可适配以下解析库 Gson、Jackson、Moshi、Protobuf、Wire、Simple XML、Scalars 支持Rxjava 3. 简洁规范 网络交互部分代码量可以减少90% ###### 数据库:GreenDao 1. Performance greenDAO 性能远远高于同类的 ORMLite,测试结果 ![](http://greenrobot.org/wordpress/wp-content/uploads/greenDAO-vs-OrmLite-vs-ActiveAndroid.png) 2. Encryption support 3. Slim library:greenDAO’s core library is less than 100k in size, so adding greenDAO does not hurt your APK size. 4. 支持 protocol buffer(protobuf) 协议数据的直接存储 5. Code generation ###### RxJava + RxAndroid RxJava本质上是一个异步操作库,是一个能让你用极其简洁的逻辑去处理繁琐复杂任务的异步事件库。 1. 函数响应式 2. 简化代码逻辑,提升代码可读性、提升开发效率、后期维护成本的降低 3. 灵活的线程管理、线程切换 RxJava可以使用 subscribeOn 与 observerOn进行线程调度,可以在不同的事件流中切换线程,而省去了很多复杂的调度代码。 ###### 依赖注入:dagger2 butterknife dagger2 妈是 Square,爹是 Google - 再也没有使用反射:图的验证、配置和预先设置都在编译的时候执行。 - 容易调试和可跟踪:完全具体地调用提供和创建的堆栈 - 更好的性能:谷歌声称他们提高了13%的处理性能 - 代码混淆:使用派遣方法,就如同自己写的代码一样 当然所有这些很棒的特点都需要付出一个代价,那就是缺乏灵活性,例如:Dagger2没用反射所以没有动态机制。 butterknife 虽然也采用了注解进行注入,不过人家可是编译期生成代码的方式,对运行时没有任何副作用 ButterKnife 只是针对 UI 进行注入,相当于对dagger的补充 ###### 图片加载:Glide 参考 **Glide vs Picasso** https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en **Glide vs Fresco** http://www.jianshu.com/p/6729dc17586b **Glide vs Fresco vs Picasso** https://zhuanlan.zhihu.com/p/21397115 ![](http://i.stack.imgur.com/TdLCr.png) ###### 数据解析:Gson 参考 英文 http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/ http://www.open-open.com/lib/view/open1434377191317.html