Android 网络操作基础知识

1. Android网络知识简介

Android 程序最重要的模块就是网络部分,如何从网络上下载数据,如何将处理过 的数据上传至网络,往往是 android 程序的关键环节。。。

2. Android网络的使用场景

现在多半数是基于移动端的开发,那么这时候我们所开发的 app 就要不断的向服 务器端发送请求,然后服务器端会根据相应的请求字段将相应的内容返回给 app 端, 这时候返回给 app 端的是 json 格式的字符串,然后 app 端通过一定的 json 解析手 段将一定的数据显示在对应的控件上,达到数据显示的效果。

3. 什么是Http协议?

HTTP 协议即超文本传送协议(Hypertext Transfer Protocol ),是 Web 联网的基 础,也是手机联网常用的协议之一,HTTP 协议是建立在 TCP 协议之上的一种应用。 HTTP 连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结 束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

HTTP 提供了封装或者显示数据的具体形式。Socket 提供了网络通信的能力

4. 什么是Https协议?

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer)

是以 安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 它是一个 URI scheme(抽象 标识符体系),句法类同 http:体系。用于安全的 HTTP 数据传输。https:URL 表明它 使用了 HTTP,但 HTTssPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在HTTP 与 TCP 之间)。被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

5. Android中网络权限:

<uses-permission android:name="android.permission.INTERNET" /> <-- 允许应用程序打开网络套接字 -->

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<-- 允许应用程序访问网络连接信息 -->

6. 检查网络连接

在执行网络操作之前,检查设备当前连接的网络连接信息是个好习惯。这样可以防 止我们的程序在无意间连接使用了非意向的网络频道。如果网络连接不可用,那么我们 的应用应该优雅地做出响应。为了检测网络连接,我们需要使用到下面两个类:

  1. 1)  ConnectivityManager:它会回答关于网络连接的查询结果,并在网络连接改变时

    通知应用程序。

  2. 2)  NetworkInfo:描述一个给定类型(移动网络或 Wi-Fi 等)的网络接口状态。下面

    这个方法可以找到的第一个已连接的网络接口,如果返回 null,则表示没有已连接 的网络接口(意味着网络连接不可用):

Android网络操作的基础知识

7、IP 地址和端口号

1) IP 地址用于在网络中唯一标识一台机器(通信实体),是一个 32 位整数,通常 用 4 个 0-255 的十进制数标识;

2) 端口号用于唯一标识通信实体上进行网络通讯的程序,同一台机器上不能有两 个程序占用同一个端口的情况;端口号是一个 16 位整数,共有 3 类;

  1. 公认端口:0-1023,它们紧密绑定一些特定的服务(比如 TCP/IP 通信协 议程序的端口);

  2. 注册端口:1024-49151,它们松散绑定一些特定服务,其余可以随意使 用,应用程序用的最多端口号来自于这个范围;

  3. 动态/私有端口:49152-65535,这些端口一般是应用程序运行时临时地、 动态地占用,可以说是一种竞争资源吧,应用程序本身不会和这些端口绑 定,一般会将其作为资源利用;

3)真正参与网络通信的对象是计算机上的程序(网络通信程序),IP 地址是它的街 道门牌,而端口是它的房间号;

8、阻塞(blocking)与非阻塞(non-blocking)IO

IO 的阻塞、非阻塞主要表现在一个 IO 操作过程中,如果有些操作很慢,比如读操 作时需要准备数据,那么当前 IO 进程是否等待操作完成,还是得知暂时不能操作后先 去做别的事情?一直等待下去,什么事也不做直到完成,这就是阻塞。抽空做些别的事 情,这是非阻塞。

非阻塞 IO 会在发出 IO 请求后立即得到回应,即使数据包没有准备好,也会返回 一个错误标识,使得操作进程不会阻塞在那里。操作进程会通过多次请求的方式直到数据准备好,返回成功的标识。

想象一下下面两种场景:

  • A 小明和小刚两个人都很耿直内向,一天小明来找小刚借书:“小刚啊,你那本XXX 借我看看”。 于是小刚就去找书,小明就等着,找了半天找到了,把书给了小明。
  • B 小明和小刚两个人都很活泼外向,一天小明来找小刚借书:“嘿小刚,你那本 XXX借我看看”。 小刚说:“我得找一会”,小明就去打球去了。过会又来,这次书找到了, 把书给了小明。

结论:A 是阻塞的,B 是非阻塞的。

  • 从 CPU 角度可以看出非阻塞明显提高了 CPU 的利用率,进程不会一直在那等待。 但是同样也带来了线程切换的增加。增加的 CPU 使用时间能不能补偿系统的切换成 本需要好好评估。

9、同步(synchronous)与异步(asynchronous)IO

判断同步和异步的标准在于:一个 IO 操作直到完成,是否导致程序进程的阻塞。 如果阻塞就是同步的,没有阻塞就是异步的。这里的 IO 操作指的是真实的 IO 操作, 也就是数据从内核拷贝到系统进程(读)的过程。

继续前面借书的例子,异步借书是这 样的:

  • C 小明很懒,一天小明来找小刚借书:“嘿小刚,你那本 XXX 借我看看”。 小刚 说:“我得找一会”,小明就出去打球了并且让小刚如果找到了就把书拿给他。小刚是个 负责任的人,找到了书送到了小明手上。

A 和 B 的借书方式都是同步的,有人要问了 B 不是非阻塞嘛,怎么还是同步?

前面说了 IO 操作的 2 个步骤:准备数据和把数据从内核中拷贝到程序进程。映射到这个 例子,书即是准备的数据,小刚是内核,小明是程序进程,小刚把书给小明这是拷贝数据。

在 B 方式中,小刚找书这段时间小明的确是没闲着,该干嘛干嘛,但是小刚找到 书把书给小明的这个过程也就是拷贝数据这个步骤,小明还是得乖乖的回来候着小刚把书递手上。所以这里就阻塞了,根据上面的定义,所以是同步。

在涉及到 IO 处理时通常都会遇到一个是同步还是异步的处理方式的选择问题。

同步能够保证程序的可靠性,而异步可以提升程序的性能。

小明自己去取书不管等着不 等着迟早拿到书,指望小刚找到了送来,万一小刚忘了或者有急事忙别的了,那书就没 了。

 

JSON 数据解析

一、 什么是JSON?

一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内 主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大 部分语言的支持),从而可以在不同平台间进行数据交换。JSON 采用兼容性很 高的文本格式,同时也具备类似于 C 语言体系的行为。

二、 Json格式:

Android网络操作的基础知识

图1

Android网络操作的基础知识

图2

三、 使用json解析图2的Json字符串:

JSON 数据一般由服务器端提供接口,我们根据接口地址解析数据,最终将 数据显示在 APP 上的过程,以上述图 2 为例来演示 json 数据解析。

Android网络操作的基础知识

相关文章: