由于在我们的程序中,不允许一些耗时的任务在主线程中出现,主要是为了防止阻塞主线程而导致的 Anr(Application not Responding),一些耗时任务主要包括:
网络访问,缓慢的磁盘操作,比较耗时的算法
当我们的主线程在一定时间里对某一事件的处理超过一定时间后会主线程会崩溃报ANR,
通常的解决方案:采用子线程技术来将耗时任务与主线程进行脱离
1、handler机制
只需要将UI更新参数在子线程中使用sendMessage发送到定义好的Handler里的handleMessage里既可以在主线程中更新UI(Handler实现了从子线程到主线程之间的跳转)
2、runOnUiThread方法
使用这个方法,既可以使得当前主线程获取cpu资源,从而进行UI的更新(至于如何从子线程中返回数据,方法很多,比如使用接口来回调获取参数)
3、使用我们熟悉的AsyncTask类
大家都熟知的右HttpClient和HttpUrlConnection两种方式,当然还有像Volley和OkHttp以及AsyncHttpClient
针对前两种最原始基础的方式,是不具备异步处理能力的,也就是需要我们配合part1里的异步处理框架来使用,否则就只能接受ANR这赤裸裸的尴尬
Volley则是具备了异步访问的能力而且访问结束的回调方法是处于主线程中的,这样就可以直接脱离异步访问框架来单独使用了(还能够替代Universal-Image-Loader异步加载图片喔)Volley使用详解
AsyncHttpClient则是对HttpClient的一种异步封装,它对于Volley的一个缺陷就是回调方法依然处于子线程中,我们依然需要使用part1里的异步框架来解决问题
原文地址:http://blog.csdn.net/bob1993_dev/article/details/46302279