Android 中的异步下载
网上提到最多的就是利用AsyncTask进行异步下载,用android-async-http第三方库的也比较多。这里写点注意事项。
先说说android-async-http,这个库发送请求利用threadpool,也就是不在主线程做发送了,但是需要注意的是,如果你在主线程调用发送函数,网络请求是不在主线程中的,但是回调函数还是在主线程中的,这一点要注意!如果你的回调函数比较复杂,就会影响UI的使用. 这种情况,需要在回调中开新线程进行处理,也可以使用AsyncTask,在AsyncTask中利用同步请求获得所有资源后,进行加工,就不会阻塞主线程了。
android-async-http回调函数在主线程中是因为处理回调的handler默认会建立在调用线程中,下面看看在ios中,回调函数的处理:
先看看最普通的NSURLConnection类,
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
注意,这个函数会创建新的线程发送网络请求。这里,可以通过queue来指定handler的处理线程。
还提供了scheduleInRunLoop:forMode:(接受NSRunloop,更底层,更确切) 和 setDelegateQueue:(接受NSOperationQueue,用起来更方便)指定回调函数执行的线程,注意两者不能同时调用!
而nsurlsession 有delegateQueue (All delegate method calls and completion handlers related to the session are performed on this queue.)
nsurlsession默认会创建新的线程发送task,即task 调用resume后,网络请求会在新的线程中执行。是不是一个task一个线程就不知道了,看不到具体的源码。
http://www.objc.io/issue-5/from-nsurlconnection-to-nsurlsession.html
Android 中的异步下载的更多相关文章
- Android中AsyncTask异步
今天我们学习了 AsyncTack, 这是一个异步任务. 那么这个异步任务可以干什么呢? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗 ...
- Android中的异步网络请求
本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关姿势.由于个人水平有限,文中难免存在疏忽和谬误,希望大家可以指出,谢谢大家:) 1. 同步网络 ...
- android中使用Http下载文件并保存到本地SD卡
1.AndroidMainfest.xml中设置权限 <uses-permission android:name="android.permission.INTERNET"& ...
- Android笔记(二十九) Android中的异步更新(一) Android中的线程
Java中的线程 1. 线程的两种实现方式 ①继承Thread类 ②实现Runnable接口 两者区别在于,Thread这个类的对象,代表的是一个线程,而Runnable的对象,代表的是线程体(也就是 ...
- Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案
我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位.重复.闪烁等问题,其实这些问题总结起来就是一个问题,我们需要对这些问题进行ListView的优化. 比如L ...
- Android中ListView异步加载数据
1.主Activity public class MainActivity extends Activity { private ListView listView; private ArrayLis ...
- Android中使用异步线程更新UI视图的几种方法
在Android中子线程是不能更新ui的. 所以我们要通过其他方式来动态改变ui视图, 1.runOnUiThreadactivity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要 ...
- Android中实现异步轮询上传文件
前言 前段时间要求项目中需要实现一个刷卡考勤的功能,因为涉及到上传图片文件,为加快考勤的速度,封装了一个异步轮询上传文件的帮助类 效果 先上效果图 设计思路 数据库使用的框架是GreenDao,一个 ...
- android开发步步为营之67:使用android开源项目android-async-http异步下载文件
android-async-http项目地址 https://github.com/loopj/android-async-http.android-async-http顾名思义是异步的http请求, ...
随机推荐
- unicode和gbk的互相转换
unicode和gbk的互相转换主要依靠window下的escape和unescape方法,然后把%u替换成\u就好了; var GB2312UnicodeConverter = { ToUnicod ...
- HNOI2002
对于当天的营业额,你要找到之前的数和他差的绝对值最小的和.由于这个是不断在插入的,所以用伸展树来维护. http://www.lydsy.com/JudgeOnline/problem.php?id= ...
- hdu1873优先队列
#include<stdio.h> #include<queue> using namespace std; struct node { int id; int val; fr ...
- 替换文件最后一行中的所有e 为 E
#root@athena5plus:~# cat b northwest NW Charles Main 3.0 .98 3 ...
- 【bzoj1562】 NOI2009—变换序列
http://www.lydsy.com/JudgeOnline/problem.php?id=1562 (题目链接) 题意 给出一个序列(0~n-1),这个序列经过某个变换会成为另外一个序列,但是其 ...
- POJ 1625 Censored!
辣鸡OI毁我青春 Description The alphabet of Freeland consists of exactly N letters. Each sentence of Freela ...
- UVA 11527 Unique Snowflakes
用STL做会很方便 SET: /*by SilverN*/ #include<iostream> #include<algorithm> #include<cstring ...
- workon在zsh中不起作用
先装了workon,然后装了zsh,发现在zsh里不起作用 翻了一下网上没有解答,就看了看bashrc文件,发现一句 source /usr/local/bin/virtualenvwrapper.s ...
- .NET/MVC-发布到IIS6.1提示未能加载程序集System.Web.Http.WebHost
http://www.bubuko.com/infodetail-1128065.html vs2013发布后,自己的用iis7.0可以发布这个网站,但是用服务器2008 IIS6.1发布这个网站一直 ...
- java的static块执行时机
一.误区:简单认为JAVA静态代码块在类被加载时就会自动执行.证错如下: class MyClass1 { static {//静态块 System.out.println("static ...