Android -- 每日一问:你是怎么搭建 Android 应用框架的?

Posted Kevin-Dev

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android -- 每日一问:你是怎么搭建 Android 应用框架的?相关的知识,希望对你有一定的参考价值。

经典回答

如果问这样的面试题,我想(我也试过)很多人都会回答上面所说的“标配”组合,顶多再加下MVP或者MVVM模式,然后就构成了一个比较流行的应用框架。

不可否认这确实是一个不错的选择,那么如果是我们在整合这些库和模式成为一个框架,我们是基于什么样的原则选择它们的呢?

RxJava

给我们的项目引入响应式编程方式,让异步方式变得更简洁,而且它的简洁与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。它流式编程的思想,丰富的操作符,线程的任意切换等优点广受大家的喜爱。

响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。

Retrofit

Retrofit是一个RESTful的Http网络请求框架的封装。注意这里并没有说它是网络请求框架,主要原因在于网络请求的工作并不是Retrofit来完成的。

Retrofit 2.0开始内置OkHttp,前者专注于接口的封装,后者专注于网络请求的高效,二者分工协作。

而且Retrofit提供不同的Converter实现(也可以自定义),同时提供RxJava支持(返回Observable对象),配合Gson和RxJava,你可以用很少的代码就实现请求、返回数据解析和操作等功能。

OkHttp

OkHttp是Retrofit底层使用的Http请求库,都是Square公司的开源产品。OkHttp是一个快速、高效的Http客户端实现,它帮我们完成了很多很多事情:

  • 支持SPDY, 可以合并多个到同一个主机的请求
  • 使用连接池技术减少请求的延迟(如果SPDY是可用的话)
  • 使用GZIP压缩减少传输的数据量
  • 缓存响应避免重复的网络请求

OkHttp还提供了拦截器(Interceptors),方便我们来监控,改写和重试HTTP访问。通过拦截器,我们很容易就能实现对Http的请求和响应记录到日志。

整合

如果我们直接这样组合就认为是一个应用框架的话,那我认为你还没有真正认识框架,或者没有遇到稍大一点复杂一点的项目,所以你毫不费力就有了自己“高大上”的框架。

但是在你整合这些库时,你更应该学习一下他们是怎么能无缝地对接上的,这一点也是我认为可以问面试者的一个重要的点。

如Retrofit的解耦方式:

1、通过注解来配置请求参数;

2、通过工厂来生成CallAdapter,Converter。

  • 你可以使用不同的请求适配器(CallAdapter),比如RxJava;
  • 你可以使用不同的反序列化工具(Converter),比如Gson、protobuff等。
Retrofit retrofit = new Retrofit.Builder()
  .baseUrl("http://api.github.com/api/")
  .addConverterFactory(GsonConverterFactory.create())
  .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
  .build();

Retrofit是如何做到的呢?其间的实现代码值得好好看看,好在代码量并不是很大,看前先学习一个Java动态代理方面的知识,也可缓解一些“痛苦”。

所以总结果一下,关于标配我会这样问:RxJava+Retrofit+OkHttp的内部是如何整合在一起的,还有就是它们如何和数据与业务逻辑层进行整合?

你的朋友是不是也在准备面试呢?你可以把今天的题目分享给好友,或许你可以帮到他。

以上是关于Android -- 每日一问:你是怎么搭建 Android 应用框架的?的主要内容,如果未能解决你的问题,请参考以下文章

Android -- 每日一问:你是如何解决 Android 的布局嵌套问题的?

Android -- 每日一问:如何设计一个照片上传 app ?

Android -- 每日一问:如何设计一个照片上传 app ?

Android -- 每日一问现在 Android 怎么学?学什么?

Android -- 每日一问:怎么理解 Activity 的生命周期?

Android -- 每日一问:在项目中使用AsyncTask会有什么问题吗?