android 网络通信框架volly
2023-09-14 08:58:19 时间
在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
这是Volley名称的由来: a burst or emission of many things or a large amount at once
在Google IO的演讲上,其配图是一幅发射火弓箭的图,有点类似流星。见下图
![](http://img.blog.csdn.net/20130702124537953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdDEyeDM0NTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
其实,从这幅图,我们也可以看出来,Volley特别适合数据量不大但是通信频繁的场景。 1.1. Volley引入的背景
在以前,我们可能面临如下很多麻烦的问题。 比如以前从网上下载图片的步骤可能是这样的流程:
ImageListener listener = ImageLoader.getImageListener(imageView, android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete);
Volley提供了一个新的控件NetworkImageView来代替传统的ImageView,这个控件的图片属性可以通过
来设定。而且,这个控件在被从父控件detach的时候,会自动取消网络请求的,即完全不用我们担心相关网络请求的生命周期问题。
示例代码如下:
ImageLoader构造函数的第二个参数是一个ImageCache的实例(严格来说,是实现ImageCache接口的某具体类的实例)
ImageCache的定义如下(在ImageLoader.java里):
Volley使用了线程池来作为基础结构,主要分为主线程,cache线程和network线程。
主线程和cache线程都只有一个,而NetworkDispatcher线程可以有多个,这样能解决比并行问题。如下图:![](http://img.blog.csdn.net/20130702124824156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdDEyeDM0NTY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Activity被终止之后,如果继续使用其中的Context等,除了无辜的浪费CPU,电池,网络等资源,有可能还会导致程序crash,所以,我们需要处理这种一场情况。 使用Volley的话,我们可以在Activity停止的时候,同时取消所有或部分未完成的网络请求。 Volley里所有的请求结果会返回给主进程,如果在主进程里取消了某些请求,则这些请求将不会被返回给主线程。
比如,可以针对某些个request做取消操作:
但是这个东西也有不实用的地方,比如大数据(large payloads ),流媒体,这些case,还需要使用原始的方法,比如Download Manager等。
总之,如果你要编写网络程序,是不是可以考虑开始使用Volley呢?
Google IO2013网络框架Volley 演讲PDF下载: http://download.csdn.net/detail/t12x3456/5686041
Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖? SharedPreferences 是 Android 平台上轻量级的 K-V 存储框架,亦是初代 K-V 存储框架,至今被很多应用沿用。 有的小伙伴会说,SharedPreferences 是旧时代的产物,现在已经有 DataStore 或 MMKV 等新时代的 K-V 框架,没有学习意义。但我认为,虽然 SharedPreference 这个方案已经过时,但是并不意味着 SharedPreference 中使用的技术过时。做技术要知其然,更要知其所以然,而不是人云亦云,如果要你解释为什么 SharedPreferences 会过时,你能说到什么程度?
Android开源系列-组件化框架Arouter-(三)APT技术详解 最近组里需要进行**组件化框架**的改造,用到了**ARouter**这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下ARouter
Android开源系列-组件化框架Arouter-(二)深度原理解析 最近组里需要进行**组件化框架**的改造,用到了**ARouter**这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下ARouter
Android开源系列-组件化框架Arouter-(一)使用方式详解 最近组里需要进行**组件化框架**的改造,用到了`Arouter`这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下`Arouter
Android单元测试框架Espresso介绍 顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
Android IO 框架 Okio 的实现原理,如何检测超时? 在上一篇文章里,我们聊到了 Square 开源的 I/O 框架 Okio 的三个优势:精简且全面的 API、基于共享的缓冲区设计以及超时机制。前两个优势已经分析过了,今天我们来分析 Okio 的超时检测机制。
Android IO 框架 Okio 的实现原理,到底哪里 OK? 今天,我们来讨论一个 Square 开源的 I/O 框架 Okio,我们最开始接触到 Okio 框架还是源于 Square 家的 OkHttp 网络框架。那么,OkHttp 为什么要使用 Okio,它相比于 Java 原生 IO 有什么区别和优势?今天我们就围绕这些问题展开。
这是Volley名称的由来: a burst or emission of many things or a large amount at once
在Google IO的演讲上,其配图是一幅发射火弓箭的图,有点类似流星。见下图
其实,从这幅图,我们也可以看出来,Volley特别适合数据量不大但是通信频繁的场景。 1.1. Volley引入的背景
在以前,我们可能面临如下很多麻烦的问题。 比如以前从网上下载图片的步骤可能是这样的流程:
ImageListener listener = ImageLoader.getImageListener(imageView, android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete);
Volley提供了一个新的控件NetworkImageView来代替传统的ImageView,这个控件的图片属性可以通过
来设定。而且,这个控件在被从父控件detach的时候,会自动取消网络请求的,即完全不用我们担心相关网络请求的生命周期问题。
示例代码如下:
holder.imageRequest = mImageLoader.get(BASE_UR + item.image_url, holder.imageView, R.drawable.loading, R.drawable.error);
注意,这里使用的不是ImageView控件,而是Volley新提供的com.android.volley.NetworkImageView。
ImageLoader构造函数的第二个参数是一个ImageCache的实例(严格来说,是实现ImageCache接口的某具体类的实例)
ImageCache的定义如下(在ImageLoader.java里):
gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response));
这段代码节选自: https://gist.github.com/ficusk/5474673
里面使用的gson(com.google.gson.Gson)是JSON的序列化和反序列化的库,可以在JSON和java model object之间进行转换。
以下是使用自定制request的例子:Volley使用了线程池来作为基础结构,主要分为主线程,cache线程和network线程。
主线程和cache线程都只有一个,而NetworkDispatcher线程可以有多个,这样能解决比并行问题。如下图:
如果在一个Activity里面启动了网络请求,而在这个网络请求还没返回结果的时候,如果Activity被结束了,则我们需要写如下代码作为防守:
Activity被终止之后,如果继续使用其中的Context等,除了无辜的浪费CPU,电池,网络等资源,有可能还会导致程序crash,所以,我们需要处理这种一场情况。 使用Volley的话,我们可以在Activity停止的时候,同时取消所有或部分未完成的网络请求。 Volley里所有的请求结果会返回给主进程,如果在主进程里取消了某些请求,则这些请求将不会被返回给主线程。
比如,可以针对某些个request做取消操作:
从演讲的例子来看,Volley应该是简化了网络通信的一些开发,特别是针对如下两种情况:
但是这个东西也有不实用的地方,比如大数据(large payloads ),流媒体,这些case,还需要使用原始的方法,比如Download Manager等。
总之,如果你要编写网络程序,是不是可以考虑开始使用Volley呢?
Google IO2013网络框架Volley 演讲PDF下载: http://download.csdn.net/detail/t12x3456/5686041
Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖? SharedPreferences 是 Android 平台上轻量级的 K-V 存储框架,亦是初代 K-V 存储框架,至今被很多应用沿用。 有的小伙伴会说,SharedPreferences 是旧时代的产物,现在已经有 DataStore 或 MMKV 等新时代的 K-V 框架,没有学习意义。但我认为,虽然 SharedPreference 这个方案已经过时,但是并不意味着 SharedPreference 中使用的技术过时。做技术要知其然,更要知其所以然,而不是人云亦云,如果要你解释为什么 SharedPreferences 会过时,你能说到什么程度?
Android开源系列-组件化框架Arouter-(三)APT技术详解 最近组里需要进行**组件化框架**的改造,用到了**ARouter**这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下ARouter
Android开源系列-组件化框架Arouter-(二)深度原理解析 最近组里需要进行**组件化框架**的改造,用到了**ARouter**这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下ARouter
Android开源系列-组件化框架Arouter-(一)使用方式详解 最近组里需要进行**组件化框架**的改造,用到了`Arouter`这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下`Arouter
Android单元测试框架Espresso介绍 顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
Android IO 框架 Okio 的实现原理,如何检测超时? 在上一篇文章里,我们聊到了 Square 开源的 I/O 框架 Okio 的三个优势:精简且全面的 API、基于共享的缓冲区设计以及超时机制。前两个优势已经分析过了,今天我们来分析 Okio 的超时检测机制。
Android IO 框架 Okio 的实现原理,到底哪里 OK? 今天,我们来讨论一个 Square 开源的 I/O 框架 Okio,我们最开始接触到 Okio 框架还是源于 Square 家的 OkHttp 网络框架。那么,OkHttp 为什么要使用 Okio,它相比于 Java 原生 IO 有什么区别和优势?今天我们就围绕这些问题展开。
相关文章
- Android开发之一种简单的异步加载图片方法
- android开发之sqlite数据库升级
- 揭破android中的闹钟app 二
- 浅论Android网络请求库——android-async-http
- android-async-http框架源码分析
- 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco
- Android App内部自动更新Library的使用(转载)
- 《android开发艺术探索》读书笔记(十五)--Android性能优化
- Android--快速开发框架 afinal
- Android错误之error loading /system/media/audio/ui/Effect_Tick.ogg
- Android实战之app版本更新升级全文章(三)
- android binder
- Android 项目中用得最多最火的第三方框架可能都在这里了
- Android 不用回调,直接返回结果
- Android 9.0 10.0wifi图标出现感叹或者叉的情况的解决方案
- 【Android 插件化】插件化框架整理
- 【Android 插件化】Hook 插件化框架 ( 从源码角度分析加载资源流程 | Hook 点选择 | 资源冲突解决方案 )
- 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | Hook 点分析 )
- Android自己定义组件系列【7】——进阶实践(4)
- Android使用应用程序资源(、颜色数组、尺寸、弦、布尔、整型)
- 如何使用Android JetPlayer类
- Android 开发 --Unable to resolve target 'android-19'
- Android的报错提示:Failed to resolve: com.android.support:appcompat-v7:28.0.0
- Android进阶之MVVM+DataBinding框架模式(更新中)
- android开发,开发环境(Android Studio)安装