sunny底层android,Android网络通信概述
网络通信在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网络通信概述相关推荐
- Android 安全机制概述
1 Android 安全机制概述 Android 是一个权限分离的系统 . 这是利用 Linux 已有的权限管理机制,通过为每一个 Application 分配不同的 uid 和 gid , 从而使得 ...
- Android 培训课件编写--- 第1章 Android应用开发概述
第1章 Android应用开发概述 随着Android系统的迅猛发展,它已经成为全球范围内具有广泛影响力的操作系统.Android系统已经不仅仅是一款手机的操作系统,它越来越广泛的被应用于平板电脑.可 ...
- android逆向分析概述_Android存储概述
android逆向分析概述 Storage is this thing we are all aware of, but always take for granted. Not long ago, ...
- 【Android】Android网络编程概述
Android网络编程概述 原文来自:http://blog.csdn.net/kieven2008/article/details/8210737 首先,应该了解的几个问题: 1)Android平台 ...
- 详细讲解Android的网络通信(HttpUrlConnection和HttpClient)
前言,Android的网络通信的方式有两种:使用Socket或者HTTP,今天这一篇我们详细讲解使用HTTP实现的网络通信,HTTP又包括两种方式编程方式: (1)HttpUrlConnection: ...
- android.opengl.GLSurfaceView概述
android.opengl.GLSurfaceView概述 翻译至android.opengl.GLSurfaceView Class Overview,水平有限,敬请谅解 hankersyan@1 ...
- 一、 Android 应用程序概述
转自:http://deaboway.iteye.com/blog/985508 一. Android 应用程序概述 1. Android 的嫡系组件 Android有四项一等公民(或称为嫡系组件) ...
- 一起Talk Android吧(第三百二十四回:Android中网络通信之TCP通信模型一)
各位看官们,大家好,上一回中咱们说的是Android中网络通信之TCP客户端的例子,这一回中咱们说的例子是网络通信之TCP通信模型.闲话休提,言归正转.让我们一起Talk Android吧! 看官们, ...
- 华为 android 11,EMUI 11抢先亮相!华为P40 Pro已升:底层非Android 11
华为定于9月10日召开HDC 2020(华为开发者大会),除了鸿蒙2.0,外界同样十分期待EMUI 11系统的登场. 日前经查询,搭载EMUI 11.0系统的华为P40 Pro(ELS-N04)已经拿 ...
- 华为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)已经 ...
最新文章
- VUE中使用sass
- 关于excel导入到封装成工具类jar包和web版门店收银网络无法无法连接上的解决方法...
- 使COUNT(*)查询总数变快
- java使用Sytem.arraycopy方法复制数组的代码
- c++中多态---3(虚析构和纯虚析构,向上类型转化和向下类型转化)
- xp 与 windows 7 共享收藏夹
- Web服务器的部署地点
- Asp.net EnableViewState属性
- CISP 考试教材《第 9 章 知识域:计算环境安全》知识整理
- 差分密码分析读书报告
- ubuntu16.04 设置开机自动运行程序
- 至尊宝代表哪一种人?
- bzoj 4238: 电压 dfs
- 【钉钉-场景化能力包】IoT物联网设备协同
- Anaconda及pytorch详细安装及使用教程
- 【一起入门NLP】中科院自然语言处理作业四:RNN+Attention实现Seq2Seq中英文机器翻译(Pytorch)【代码+报告】
- python调用usb摄像头_Python通过cv2读取多个USB摄像头
- 【论文总结】[ATC '18] SAND:A high-performance serverless computing platform
- android 实现微博分享,分享到微信微博QQ的简单实现(二)
- linux改开机图片,修改linux开机启动图像