网络通信在App的使用中占据重要地位,要实现网络通信,从宏观上分为两种方式,即:调用原生类和使用第三方框架。

调用原生类

Android中通过原生类进行网络通信时,根据业务场景的不同,主要分为两种方式,分别为HTTP网络请求和Socket网络请求,如图所示:

一. Http通信

在Android中发送Http网络请求一般有三种方式,分别为HttpURLConnection、HttpClient和AndroidHttpClient:

1. HttpURLConnection

继承自URLConnection,是 java.net.* 提供的与网络操作相关的标准Java接口,可用于指定URL并发送GET请求、POST请求。

HttpURLConnection connection = null;

try {

URL url = new URL("http://www.baidu.com");

connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("GET");

connection.setRequestProperty("Charset", "UTF-8");

connection.setRequestProperty("Content-Type", "text/html;charset=UTF-8");

connection.connect();

if (connection.getResponseCode() == 200) {

InputStream is = connection.getInputStream();

//do something

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (null != connection) {

connection.disconnect();

}

}

2. HttpClient

Apache提供的Http网络访问接口,也可以完成Http的GET请求和POST请求,一开始被引入到AndroidAPI中,但在Android在6.0后删除了该类库,如果仍然想要使用,需要在build.gradle文件中进行配置,配置如下:

android {

useLibrary 'org.apache.http.legacy'

}

代码如下:

try {

HttpGet httpGet = new HttpGet("http://www.12306.cn/mormhweb/");

HttpClient httpClient = new DefaultHttpClient();

HttpResponse httpResponse = httpClient.execute(httpGet);

if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

String resultData = EntityUtils.toString(httpResponse.getEntity(), "utf-8");

//do something

}

} catch (Exception e) {

e.printStackTrace();

}

3.AndroidHttpClient

Android.net.*提供的网络接口,继承自HttpClient常常进行Android特有的网络编程,使用较少。

二. Socket通信

在Android中同样支持Socket通信,是网络通信过程中端点的抽象表示,应用程序与服务器通信可以采用两种模式:TCP可靠通信和UDP不可靠通信。

使用第三方框架

在网络通信过程中,直接使用自带的原生类虽然灵活性比较高,可以根据业务需求进行多种不同配置,但在实际使用中各种功能都需要用户自己去封装定义,因此使用第三方框架就变成了一个很好的选择,常用的第三方框架如下:

okhttp和volley的底层是HttpURLConnection;retrofit是对okhttp的包装,其底层也是HttpURLConnection;android-async-http和xUtils其底层是HttpClient;等其他的第三方库,通过分析可以得到结论,第三方库都是对原生类的功能的封装以及扩展。

一. OkHttp通信

代码如下:

OkHttpClient client = null;

Response response = null;

try {

client = new OkHttpClient.Builder()

.connectTimeout(10000, TimeUnit.MILLISECONDS)

.build;

Request request = new Request.Builder()

.url(new Url("www.xxx.com"))

.build();

reponse = client.newCall(request).execute();

if(response.isSuccessful()){

//do something

} else {

//do something

}

} catch(Exception e) {

//do something

} finally {

if (response != null) {

response.close();

}

if (client != null) {

client.dispatcher().executorService().shutdown();

client.connectionPool().evictAll();

}

}

持续更新ing...

sunny底层android,Android网络通信概述相关推荐

  1. Android 安全机制概述

    1 Android 安全机制概述 Android 是一个权限分离的系统 . 这是利用 Linux 已有的权限管理机制,通过为每一个 Application 分配不同的 uid 和 gid , 从而使得 ...

  2. Android 培训课件编写--- 第1章 Android应用开发概述

    第1章 Android应用开发概述 随着Android系统的迅猛发展,它已经成为全球范围内具有广泛影响力的操作系统.Android系统已经不仅仅是一款手机的操作系统,它越来越广泛的被应用于平板电脑.可 ...

  3. android逆向分析概述_Android存储概述

    android逆向分析概述 Storage is this thing we are all aware of, but always take for granted. Not long ago, ...

  4. 【Android】Android网络编程概述

    Android网络编程概述 原文来自:http://blog.csdn.net/kieven2008/article/details/8210737 首先,应该了解的几个问题: 1)Android平台 ...

  5. 详细讲解Android的网络通信(HttpUrlConnection和HttpClient)

    前言,Android的网络通信的方式有两种:使用Socket或者HTTP,今天这一篇我们详细讲解使用HTTP实现的网络通信,HTTP又包括两种方式编程方式: (1)HttpUrlConnection: ...

  6. android.opengl.GLSurfaceView概述

    android.opengl.GLSurfaceView概述 翻译至android.opengl.GLSurfaceView Class Overview,水平有限,敬请谅解 hankersyan@1 ...

  7. 一、 Android 应用程序概述

    转自:http://deaboway.iteye.com/blog/985508 一. Android 应用程序概述  1. Android 的嫡系组件 Android有四项一等公民(或称为嫡系组件) ...

  8. 一起Talk Android吧(第三百二十四回:Android中网络通信之TCP通信模型一)

    各位看官们,大家好,上一回中咱们说的是Android中网络通信之TCP客户端的例子,这一回中咱们说的例子是网络通信之TCP通信模型.闲话休提,言归正转.让我们一起Talk Android吧! 看官们, ...

  9. 华为 android 11,EMUI 11抢先亮相!华为P40 Pro已升:底层非Android 11

    华为定于9月10日召开HDC 2020(华为开发者大会),除了鸿蒙2.0,外界同样十分期待EMUI 11系统的登场. 日前经查询,搭载EMUI 11.0系统的华为P40 Pro(ELS-N04)已经拿 ...

  10. 华为p40android auto,华为P40 Pro升级EMUI 11并获Wi-Fi6认证:底层基于Android 10

    华为定于9月10日召开HDC 2020(华为开发者大会),除了鸿蒙2.0,外界同样十分期待EMUI 11系统的登场. 日前经查询, 搭载EMUI 11.0系统的华为P40 Pro(ELS-N04)已经 ...

最新文章

  1. VUE中使用sass
  2. 关于excel导入到封装成工具类jar包和web版门店收银网络无法无法连接上的解决方法...
  3. 使COUNT(*)查询总数变快
  4. java使用Sytem.arraycopy方法复制数组的代码
  5. c++中多态---3(虚析构和纯虚析构,向上类型转化和向下类型转化)
  6. xp 与 windows 7 共享收藏夹
  7. Web服务器的部署地点
  8. Asp.net EnableViewState属性
  9. CISP 考试教材《第 9 章 知识域:计算环境安全》知识整理
  10. 差分密码分析读书报告
  11. ubuntu16.04 设置开机自动运行程序
  12. 至尊宝代表哪一种人?
  13. bzoj 4238: 电压 dfs
  14. 【钉钉-场景化能力包】IoT物联网设备协同
  15. Anaconda及pytorch详细安装及使用教程
  16. 【一起入门NLP】中科院自然语言处理作业四:RNN+Attention实现Seq2Seq中英文机器翻译(Pytorch)【代码+报告】
  17. python调用usb摄像头_Python通过cv2读取多个USB摄像头
  18. 【论文总结】[ATC '18] SAND:A high-performance serverless computing platform
  19. android 实现微博分享,分享到微信微博QQ的简单实现(二)
  20. linux改开机图片,修改linux开机启动图像

热门文章

  1. 《天天数学》连载07:一月七日
  2. VB讲课笔记04:数据类型、运算符与表达式、常用函数
  3. 【BZOJ1070】【codevs2436】修车,费用流
  4. 【codevs2301】【BZOJ2186】沙拉公主的困惑,数论练习之逆元与φ
  5. Must 和 have to_54
  6. 1.极限——ε-δ例子_7
  7. stm32定时2通道3映射_stm32学习笔记之问题总结
  8. 文本过滤后返回空值_利用Fiddler来Mock接口返回值
  9. 无序列表圆点变空心_前端HTML -- 列表标签
  10. 组件启动顺序_风扇组件的检测代换