android开发笔记之网络编程—异步加载(AsyncTask)

本文介绍了Android中使用AsyncTask进行网络编程的异步加载方式,对比了Handler机制,阐述了AsyncTask的工作原理、优缺点,并详细解析了AsyncTask的泛型参数、重写方法以及执行流程。通过示例代码展示了如何使用AsyncTask进行异步操作,强调了使用时的注意事项。
摘要由CSDN通过智能技术生成

看了前面的文章我们知道请求网络的几种方式:

1.使用TCP协议和URL进行网络编程

    a)基于TCP协议:ServerSocket,Socket

    b)基于URL:URL    和    URLConnection

2.使用Http协议进行网络编程

    a)HttpURLConnection

    b)HttpClient

我们知道这些网络请求都应该在子线程中,不能在主线程中(因为耗时操作会阻塞主线程,造成ANR)。但是在子线程中请求的数据需要传递给主线程来更新UI。我们经常使用的一种方式应该是借助于 Handler机制

是的,这是一种方式,今天我们来讲解另外一种方式来更新UI—–AsyncTask(异步加载).

这个AsyncTask(异步加载)将访问网络和更新UI放在了一起,其实究其根源也是使用了Handler机制,只不过帮我们把Handler机制和访问网络封装起来罢了。

那这两种方式做个比较:

Handler VS AsyncTask

AsyncTask实现的原理:AsyncTask的本质是一个线程池,所有提交的异步任务都会在这个线程池中的工作线程内执行,当工作线程需要跟UI线程交互时,工作线程会通过向在UI线程创建的Handler传递消息的方式,调用相关的回调函数,从而实现UI界面的更新。

优点:

①简单快捷

②过程可控

缺点:

在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来.

Handler实现的原理:在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)àthread(子线程)运行并生成Message- àLooper获取Message并传递给HandleràHandler逐个获取Looper中的Message,并进行UI变更。

优点:

①结构清晰,功能定义明确

②对于多个后台任务时,简单清晰

缺点:

在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)

既然这样我们就来讲下AsyncTask(异步加载)吧。

AsyncTask定义了三种泛型类型 Params,Progress和Result。(也是可以指定为空的,如 AsyncTask <Void, Void, Void>)

 - Params 启动任务执行的输入参数。比如Http请求的URL

 - Progress 后台任务执行的进度百分比。

 - Result 后台执行任务最终返回的结果。比如String

使用过AsyncTask 的同学都知道一个异步加载数据最少要重写以下这两个方法:

  • doInBackground(Params…)

    说明:

        doInBackground有返回值,并且返回值由Result决定
    
        参数列表首先是一个可变长参数,是由Params决定
    
        执行时机:在onPreExecute()方法之后立马执行
    
        作用:主要负责执行那些很耗时的后台操作,在后台执行
    
        跟之前在子线程写的代码是一样的
    
        在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
    
  • onPostExecute(Result)

    说明:

        onPostExecute(Result)没有返回值
    
        参数是doInBackground的返回值
    
        执行时机:doInBackground执行完
    
        相当于Handler 处理UI的方式
    
        此方法在主线程执行
    

有必要的话你还得重写以下这三个方法,但不是必须的:

  • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值