几个常用的异步框架和网络访问框架区分对比

Part1:

由于在我们的程序中,不允许一些耗时的任务在主线程中出现,主要是为了防止阻塞主线程而导致的
Anr(Application not Responding),一些耗时任务主要包括:

网络访问,缓慢的磁盘操作,比较耗时的算法

当我们的主线程在一定时间里对某一事件的处理超过一定时间后会主线程会崩溃报ANR,

通常的解决方案:采用子线程技术来将耗时任务与主线程进行脱离

1、handler机制

只需要将UI更新参数在子线程中使用sendMessage发送到定义好的Handler里的handleMessage里既可以在主线程中更新UI(Handler实现了从子线程到主线程之间的跳转)

2、runOnUiThread方法

使用这个方法,既可以使得当前主线程获取cpu资源,从而进行UI的更新(至于如何从子线程中返回数据,方法很多,比如使用接口来回调获取参数)

3、使用我们熟悉的AsyncTask类

AsyncTask使用详解和源码分析

Part2:网络访问

大家都熟知的右HttpClient和HttpUrlConnection两种方式,当然还有像Volley和OkHttp以及AsyncHttpClient

针对前两种最原始基础的方式,是不具备异步处理能力的,也就是需要我们配合part1里的异步处理框架来使用,否则就只能接受ANR这赤裸裸的尴尬

Volley则是具备了异步访问的能力而且访问结束的回调方法是处于主线程中的,这样就可以直接脱离异步访问框架来单独使用了(还能够替代Universal-Image-Loader异步加载图片喔)Volley使用详解

AsyncHttpClient则是对HttpClient的一种异步封装,它对于Volley的一个缺陷就是回调方法依然处于子线程中,我们依然需要使用part1里的异步框架来解决问题

时间: 2024-08-30 01:09:26

几个常用的异步框架和网络访问框架区分对比的相关文章

Retrofit网络访问框架的学习

Retrofit具体使用方法 1 import android.app.AlertDialog; 2 import android.content.DialogInterface; 3 import android.os.Bundle; 4 import android.os.Environment; 5 import android.os.Handler; 6 import android.support.v7.app.AppCompatActivity; 7 import android.u

Retrofit 网络访问框架简单使用

1.引入远程依赖:包括okhttp;retrofit2;retrofit的GSON解析器 compile'com.squareup.okhttp3:okhttp:3.2.0' compile'com.squareup.retrofit2:retrofit:2.0.2' compile'com.squareup.retrofit2:converter-gson:2.0.2' 2.初始化okhttpclient(可以设置更多的okhttp参数): OkHttpClient client=new Ok

【Java&Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同时支持同步和异步请求)开篇

在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正式开篇来详细介绍这个库的实现,同时结合源码探讨如何设计一个优雅的Android网络请求框架.做过一段时间Android开发的同学应该对这个库不陌生,因为它对Apache的HttpClient API的封装使得开发者可以简洁优雅的实现网络请求和响应,并且同时支持同步和异步请求. 网络请求框架一般至少需要具备如下几个组件:1

基于Retrofit+RxJava的Android分层网络请求框架

目前已经有不少Android客户端在使用Retrofit+RxJava实现网络请求了,相比于xUtils,Volley等网络访问框架,其具有网络访问效率高(基于OkHttp).内存占用少.代码量小以及数据传输安全性高等特点. Retrofit源码更是经典的设计模式教程,笔者已在之前的文章中分享过自己的一些体会,有兴趣的话可点击以下链接了解:<Retrofit源码设计模式解析(上)>.<Retrofit源码设计模式解析(下)> 但在具体业务场景下,比如涉及到多种网络请求(GET/PU

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty

Java网络编程和NIO详解9:基于NIO的网络编程框架Netty 转自https://sylvanassun.github.io/2017/11/30/2017-11-30-netty_introduction/ netty是基于NIO实现的异步事件驱动的网络编程框架,学完NIO以后,应该看看netty的实现,netty框架涉及的内容特别多,这里只介绍netty的基本使用和实现原理,更多扩展的内容将在以后推出. 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎

网络请求框架---Volley

去年的Google I/O大会为android开发者带来了一个网络请求框架,它的名字叫做Volley.Volley诞生的使命就是让Android的网络请求更快,更健壮,而且它的网络通信的实现是基于HttpURLConnection的.前几天我整理了两个网络请求工具类,应付日常工作的开发需求还是没问题的,自己分别在HttpURLConnection和HttpClient的基础上进行进一层的封装,保证了API的足够简洁友好.有兴趣的同学可以回头去翻翻,源码在Github上,搜索AndroidHttp

Android下基于线程池的网络访问基础框架

引言 现在的Android开发很多都使用Volley.OkHttp.Retrofit等框架,这些框架固然有优秀的地方(以后会写代码学习分享),但是我们今天介绍一种基于Java线程池的网络访问框架. 实现思路及实现 APP界面上面的数据都是通过网络请求获取的,我们能不能将网络请求依次入队,然后配合着Java线程池,让线程依次处理我们的请求,最后返回结果给我们.下面我们先来看一下线程池工具类的实现: 1 public class ThreadPoolUtils { 2 3 private Threa

Github 上Top1的Android 异步网络请求框架

今天给大家分享一个github上Top1的Android异步网络请求框架的使用方法,我给大家分享一个它的基本用法. 先来一个简单的get请求 AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", new AsyncHttpResponseHandler() { @Override public void onStart() { // called before reques

greenev —— Python 异步网络服务框架

greenev是一个基于greenlet协程,事件驱动,非阻塞socket模型的Python网络服务框架,它使得可以编写同步的代码,却得到异步执行的优点. 本项目受到gevent, openresty, alilua, skynet, clowwindy/ssloop的启发,在此表示感谢. reactor模式采用基于epoll, kqueue, poll, select的IO复用机制 基于底层的reactor完成上层greenlet协程的调度 在CentOS6.5, Ubuntu12.04, F