Android网络开发学习总结

目录

网络框架对比和源码分析

Volley: 

重复请求问题

okhttp

其它

Get与post区别

HttpURLConnection与HttpClient

网络请求流程

网络协议

HTTP相关

TCP与UDP


网络框架对比和源码分析

自己去设计网络请求框架,怎么做?

Android常用的网络框架

Volley: 

转载自:Android网络框架-Volley

其中蓝色的是主线程,绿色的是缓存线程,黄色的是网络线程

1.当一个Request请求添加到RequestQueue请求队列中,Volley就开始工作了。RequestQueue请求队列中持有一个CacheDispatcher缓存管家和一组NetworkDispatcher网络管家。

2.RequestQueue会先叫来CacheDispatcher缓存管家,让他去看看,当前请求的数据在没在cache中。

     2.1.当前的数据在cache中,那就把数据从cache中取出来,然后经过一番加工,将加工好的数据交付给主线程。

     2.2.当前数据没在cache中,进行第3步。

3.进行到了这一步,那肯定是数据没有在缓存中,那只能去网络中获取了,这时候RequestQueue会叫来NetworkDispatcher,NetworkDispatcher可是有一帮呢,其实这是一个线程池,默认情况下会启动4个线程去网络下载数据。所以RequestQueue把当前闲着的NetworkDispatcher叫来,给他们分配任务。

4.拿到任务的NetworkDispatcher就会去网络上下载数据了,与此同时,他会判断下载到的数据能否写入到cache缓存中,如果可以的话就写入cache,以便于下一次直接从cache中获取到数据。最后,将数据加工,交付给主线程。
 

优缺点:Android Volley的优缺点及源码分析

volley中为了提高请求处理的速度,采用了ByteArrayPool进行内存中的数据存储的,如果下载大量的数据,这个存储空间就会溢出,所以不适合大量的数据。

volley 的线程池是基于数组实现的,即newFixedThreadPool(4)核心线程数不超过4个,也不会自动扩展,一旦大数据上传或者下载长时间占用了线程资源,后续所有的请求都会被阻塞。最后,Volley是不适合上次和下载大文件

重复请求问题

setRetryPolicy 设置超时时间,重连次数。

解决Volley重复请求问题

okhttp

在这里插入图片描述

okhttp如何处理网络缓存的: 使用CacheControl处理,Request.Builder().cacheControl(cache)。

HttpUrlConnection 和 okhttp关系: HttpUrlConnection 在Android4.4之后,是通过okhttp实现的,用HttpHandler作为桥梁过渡。

建造者模式。分发器、拦截器

    分发器用线程池来调度任务请求。
    五大默认拦截器:是否retry, 桥接应用与服务器,处理缓存,建立与服务器的连接,与服务器通信。
    使用方法参考:OKhttp使用方法 OkHttpClient 申明工具类,Request 封装请求的地址参数等,并传入newCall做参数,enqueue插入队列,在onResponse 回调中处理。
    原理参考:Okhttp原理

可和RxJava, Retrofit 搭配使用。

RXJava:建造者模式、观察者模式、链式处理,


Retrofit

retrofit设计思想

  1. 底层基于OkHttp,
  2. 用注解方式申明url路径等,语言简洁, 链式处理,
  3. 动态代理 封装了一些通用逻辑

其它

WebSocket与socket的区别:WebSocket 和Http都是可靠传输的应用层协议,但WebSocket能双向通信。Socket不是协议,是为了通信抽象出来的一层接口。   WebSocket用于即时通讯,替代轮询。

Get与post区别

参考:Get和post区别

(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制,非协议的限制,而是浏览器和服务器限制了长度 Get传参长度的误解
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据.

get效率高
 

HttpURLConnection与HttpClient

Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。

Android6.0 后已经不支持HttpClient。

网络请求流程

描述一次网络请求的流程:

  1.  通过URL查找IP;
  2. 对IP结果建立TCP链接;
  3. 向服务器发送数据;
  4. 服务器解析并返回数据;
  5. 浏览器解析HTML;

client如何确定自己发送的消息被server收到?: 需要应用层实现,server收到信息后给予反馈。

Https请求慢的解决办法?(提示:DNS,携带数据,直接访问IP)

网络协议

HTTP相关

HTTP协议:是用于从万维网服务器传输超文本到本地浏览器的传送协议。

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。

2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

5、支持B/S及C/S模式。

HTTP与HTTPS

HTTP与HTTPS的区别以及如何实现安全性:https安全,效率低,要安装证书,申请证书会产生费用,可以防止运营商劫持;

https内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。

为什么内容传输用的是对称加密:

首先:非对称加密的加解密效率是非常低的,而 http 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。

另外:在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以 HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。


HTTPS用的是对称加密还是非对称加密

http statusCode(状态码)

1xx:指示信息,表示请求已经接收,继续处理。

201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问。

300-3007表示的意思是:要完成请求,您需要进一步进行操作。通常,这些状态代码是永远重定向的。

4XXHTTP状态码表示请求可能出错,会妨碍服务器的处理。 (客户端错误

500至505表示的意思是:服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

TCP与UDP

TCP与UDP的区别:

1.基于连接与无连接;

2.对系统资源的要求(TCP较多,UDP少);

3.UDP程序结构较简单;

4.流模式与数据报模式 ;

5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发入门可以通过以下步骤进行: 1.了解Android开发环境:Android开发主要使用Android Studio作为开发工具。Android Studio是由谷歌公司提供的一款集成开发环境,用于编写、调试和测试Android应用程序。 2.学习编程语言:Android应用程序主要使用Java或Kotlin进行开发。如果您已经熟悉其中一种编程语言,可以直接开始学习Android开发。如果您是初学者,建议先学习Java基础知识,然后再深入学习Android开发。 3.学习Android组件和API:Android应用程序由各种组件组成,如Activity、Fragment、Service、Broadcast Receiver和Content Provider等。了解这些组件的用途和功能对于开发Android应用程序至关重要。此外,还需要学习Android提供的各种API,以便在应用程序中实现不同的功能。 4.进行实际开发:通过创建简单的示例应用程序来练习和巩固所学知识。您可以从编写一个简单的"Hello World"应用程序开始,然后逐渐扩展功能和复杂性。 5.学习调试和测试:学习如何使用Android Studio的调试工具,以及如何进行单元测试和集成测试,以确保应用程序的质量和稳定性。 6.深入学习其他相关技术:一旦掌握了Android开发的基础知识,可以进一步学习其他相关技术,如数据库管理、网络通信、用户界面设计等,以提升应用程序的功能和用户体验。 总结Android开发入门需要了解Android开发环境、编程语言、Android组件和API,并通过实际开发和调试来巩固所学知识。随着经验的增加,可以深入学习其他相关技术来提升应用程序的功能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值