========

腰果除了网络模块使用了Retrofit+RxJava,图片加载模块使用了Glide

腰果使用了以下开源库

* Retrofit
* OkHttp
* RxJava & RxAndroid
* Glide
* SwipeBackHelper
* Leakcanary
* BottomNavigationViewEx
腰果实现的技术

*
* 使用Databinding作为整体架构
* 欢迎界面的BulingBulingTextView
* 手动实现了上拉加载更多,并加入了加载错误的容错,点击重新加载回调
* CardView + 多种type的RecyclerView展示干货列表
*
结合BottomNavigationViewEx实现的底部导航,BottomNavigationViewEx继承于原生的BottomNavigationView
* 使用自定义不可滑动,没有动画的ViewPager来管理不同的Fragment模块
* 使用ViewPager来展示不同日期,不同类型的干货列表
* OkHttp + Retrofit + RxJava 实现的网络模块
* Glide加载图片,处理图片缓存
* webview展示干货,水平进度条显示加载进度
* 结合SwipeBackHelper实现的滑动返回功能(现在貌似很流行)
* 简单的分享功能
* 网络错误时的界面容错
======== 


* Kotlin: 作为 Android 领域的 Swift,绝对让你如沐新风。抛弃沉重的 Java 语法,Kotlin
融入了很多现代编程语言的思想,作为开发者,接受新的语言,了解新语言的发展趋势,更有利于开阔你的思路和加深对语言的理解。在 Android 开发上,使用
Kotlin 并不会让你付出什么代价,为什么不来试试? 使用Kotlin进行Android开发
<https://link.zhihu.com/?target=http%3A//ragnraok.github.io/using-kotlin-to-write-android-app.html>

* React Native: 跨平台一直是程序员的梦想,而且移动应用的跨平台解决方案也很多,因为 Facebook
的参与和力推,让这个解决方案带上了光环。第一个用 React Native 开发的 App 已经在 Google Play 上架 Facebook 广告管理工具

<https://link.zhihu.com/?target=https%3A//play.google.com/store/apps/details%3Fid%3Dcom.facebook.adsmanager>
,听说 Android 的 SDK 也马上会到来,React Native
<https://link.zhihu.com/?target=https%3A//facebook.github.io/react-native/>。
* Sky: 与 React Native 类似,使用 Web 开发语言来做移动平台的开发,虽然这个只是一个尝试,但是这是 Google
自身推出的,特别是在 Java 语言的使用上败诉之后,这可能会有一些作为呢,domokit/sky_sdk · GitHub
<https://link.zhihu.com/?target=https%3A//github.com/domokit/sky_sdk>开发模式

* Dagger 2:依赖注入并不是什么新技术,但是使用在 Android 确实一个新的尝试。Android App
越来越被当成严肃的大型项目来构建,很多在以前大型服务器开发上使用的技术都被应用到了移动开发。Android 开发分模块开发,使用 Dagger
来松耦合模块。特别值得一体的是,Dagger 2 现在由 Google 亲自接管。 Dagger ‡ A fast dependency injector
for Android and Java.
<https://link.zhihu.com/?target=http%3A//google.github.io/dagger/>
* MVP:因为 Android 并没有严格的业务和界面区分,项目一复杂,就很容易使代码陷入混乱。现在 Android 开发社区对 MVP
模式讨论越来越热,觉得 MVP 是非常适合 Android APP 开发。MVP for Android: how to organize the
presentation layer
<https://link.zhihu.com/?target=http%3A//antonioleiva.com/mvp-android/>
* RxAndroid: 函数响应式编程(Functional Reactive Programming)也不是新内容,RxAndroid 把
RxJava 带到 Android 环境中。很多时候,编写 Android
程序,你也可以看成是数据的处理和流动,换一种思想编程,曾经看起来很棘手的问题,瞬间就很优雅的解决了:ReactiveX/RxAndroid · GitHub
<https://link.zhihu.com/?target=https%3A//github.com/ReactiveX/RxAndroid>
* MVVM :这是因为开始官方支持 DataBinding,把 MVVM 直接带到 Android 中。数据绑定在 Windows WPF 和 Web
已经非常常见,它非常高效的开发效率,让你只关心你的数据和业务。这也对 Android 开发来说,无疑是一个非常重大的影响:android
UI设计MVVM设计模式讨论? - M.A.G.I 的回答
<http://www.zhihu.com/question/30976423/answer/50224601>
* 插件化:针对大型 Android 项目,很多 App 开始使用插件来分模块构建相对独立的功能。
* Hybrid:完全使用 HTML 5 开发 App,目前还不成熟。但是折中方案在很多情况下是非常适合的,典型的就是微信,大部分信息展示都是通过 H5
来完成,同时通过 Hybird 方式,把 Web 和 Native 打通,提供给网页访问本地资源的能力。UI设计

* Material Design:已经红遍了大江南北,这方面的讨论实在太多了,而且各种支持库都有了,特别是 Google 官方出了一个支持库 
Android Design Support Library
<https://link.zhihu.com/?target=http%3A//android-developers.blogspot.hk/2015/05/android-design-support-library.html>

* Sketch 3: 这是一个专为设计移动端 UI 的设计工具,作为开发者,不用懂那么复杂的 PS 使用,也可以做非常专业设计:https://
designcode.io/sketch
<https://link.zhihu.com/?target=https%3A//designcode.io/sketch>===========
流行的图片加载库

Picasso

Square公司的开源项目,Square公司的网络库okHttp一起能发挥最大作用。自身无缓存功能,依赖库okHttp实现

Fresco

FB的明星项目,也是去年最火的项目之一,匿名共享缓存等机制保证低端机表现极佳,但是源代码基于C/C++,阅读困难度提升。

Glide,

Google员工私人项目,但是Google很多项目在用,相对Picasso在Gif方面有优势。

线程通信库:

EventBus

基于订阅和被订阅的观察者模式的实现的线程通信框架,一边注册订阅,一边回调处理。

RxJava

基于订阅和被订阅的观察者模式的实现的线程通信框架,
支持线程自由切换,一推出就让rx响应式编程火到了极致,让代码阅读爽的极致,相信不久的将来Rx系列思想将风靡全球. 
地址:https://github.com/ReactiveX/RxJava

======

网络框架

Okhttp

Square公司推出的网路库,采用链式思想,让开发起来简易很多,谷歌已在android6.0采用默认请求库,相信他的强大让你瞬间震撼!

Retrofit


一款基于异步线程的网络请求框架,一款android安全类型的http客户端,支持线程安全,开发者无需关注线程问题,同样是基于链式编程思想的一款网络请求利器。配合基友Rxjava,让你的app强大到极致,Retrofit
从2015年就已经诞生了,为何直到2016年初才被广泛用起来呢
一种是大家还是对新技术的观望态度,没能立马火起来,后期主要还是谷歌自身推广okhttp的广泛运用和面向响应式编程的启发,加之RXJava的兴起,况且Retrofit
2.0自身支持okHttp和RxJava,才让开发者了解Retrofit的强大, 相信不久后各种框架都会完美互相支持。

项目地址:https://github.com/square/retrofit


移动开发技术的层出不穷,也给开发者带来的欢喜和苦恼,需要不断去掌握新的技术,降低开发成本,但又带来了学习技术的成本,对于已成型的项目却带来了不必要的改造产出,对于新技术,不必排斥,也未必去热衷,如果你是开发者个人,那么可以花精力多去关注,没时间的人永远只会找借口,总归有好处。如果是企业
你能承担人力成本的前提下,那么可以去积极踩坑和尝试,帮助其他开发者学习,没有资金人力成本的,那么还是建议用成熟技术和框架,在后续被其他大企业踩稳后再不断引进为好。

=====

Sky

与 React Native 类似,使用 Web 开发语言来做移动平台的开发,虽然这个只是一个尝试,但是这是 Google 自身推出的,特别是在 Java
语言的使用上败诉之后,这可能会有一些作为呢,domokit/sky_sdk · GitHub 
开发模式

Dagger 2

依赖注入并不是什么新技术,web端的spring的成功已让开发者有目共堵,在 Android 确实一个新的尝试。Android App
越来越被当成严肃的大型项目来构建,很多在以前大型服务器开发上使用的技术都被应用到了移动开发。Android 开发分模块开发,使用 Dagger
来松耦合模块。特别值得一体的是,Dagger 2 现在由 Google 亲自接管。 Dagger ? A fast dependency injector
for Android and Java.

架构模式

MVP

因为 Android 并没有严格的业务和界面区分,项目一庞大,就很容易使代码结构显得越来越乱。现在 Android 端对 MVP
模式讨论越来越热,谷歌6.0API以及更多的体现了MVP设计思维,觉得 MVP 是非常适合 Android 上的APP 开发。MVP for Android:
how to organize the presentation layer

MVVM :

这是因为开始官方支持 DataBinding,把 MVVM 直接带到 Android 中。数据绑定在 Windows WPF 和 Web
(尤其JSP中)已经非常常见,它非常高效的开发效率,让你只关心你的数据和业务。这也对 Android 开发来说,无疑是一个非常重大的里程碑

RxAndroid:

函数响应式编程(Functional Reactive Programming)也不是新内容,RxAndroid 把 RxJava 带到 Android
环境中。很多时候,编写 Android
程序,你也可以看成是数据的处理和流动,换一种思想编程,曾经看起来很棘手的问题,瞬间就很优雅的解决了,相信你会被这种build模式的开发会越来越爱

插件模块化

虽然插件化开发已不是什么新鲜事,但是很是属于少数公司能做的起来的工程,针对大型 Android 项目,基于频繁发包,很多 App
开始使用插件来分模块构建相对独立的功能,著名的有DL,360Plugin, 携程,阿里都有自己的开源项目。

Hybrid

完全使用 H5 开发 App,目前已很成熟,但是体现并不很好。可以短时间内更新APP
UI,适配能力超强,但是基于流量严重,但是折中方案在很多情况下是非常适合的,典型的就是淘宝微信,大部分信息展示都是通过 H5 来完成,同时通过 Hybird
方式,把 Web 和 Native 打通,提供给网页访问Native的能力。

UI风格

Material Design

已经的不能再火了,这方面的讨论实在太多了,而且各种各样的库,相信你以前写几个类的控件,现在你只要一行代码,特别是 Google 官方出了一个支持库
Android Design Support Library之后,你依旧可以在低版本上实现高效果UI。

Sketch 3

这是一个专为设计移动端 UI 的设计工具,作为开发者,不用懂那么复杂的 PS 使用,也可以做非常专业设计:
https://designcode.io/sketch <https://designcode.io/sketch>

========

android 最新技术





。其实ConstraintLayout是Android <http://www.2cto.com/kf/yidong/Android/>Studio
2.2中主要的新增功能之一,也是Google在去年的I/O大会上重点宣传的一个功能。我们都知道,在传统的Android开发当中,界面基本都是靠编写XML代码完成的,虽然Android
Studio也支持可视化的方式来编写界面,但是操作起来并不方便,我也一直都不推荐使用可视化的方式来编写Android应用程序的界面。


而ConstraintLayout就是为了解决这一现状而出现的。它和传统编写界面的方式恰恰相反,ConstraintLayout非常适合使用可视化的方式来编写界面,但并不太适合使用XML的方式来进行编写。当然,可视化操作的背后仍然还是使用的XML代码来实现的,只不过这些代码是由Android
Studio根据我们的操作自动生成的。


另外,ConstraintLayout还有一个优点,它可以有效地解决布局嵌套过多的问题。我们平时编写界面,复杂的布局总会伴随着多层的嵌套,而嵌套越多,程序的性能也就越差。ConstraintLayout则是使用约束的方式来指定各个控件的位置和关系的,它有点类似于RelativeLayout,但远比RelativeLayout要更强大。

---------