AsyncTask的使用

为什么要使用AsyncTask?

这与android的UI操作不是线程安全的有关。
1、android的主程序中不能进行耗时操作
2、android又不允许我们在子线程中操作主线程中的UI控件
3、UI操作只能在UI线程中执行
4、耗时操作要在子线程中执行,执行完成后将结果返回给主线程去刷新UI

AsyncTask的使用好处?

1、我们不需要自己创建子线程,AsyncTask内部已经封装好了线程池去执行耗时操作
2、不需要自己写相应的方法去更新UI界面 例如:根据下载进度更新UI界面中的ProgressBar的进度
3、AsyncTask已经包含了所有子线程和UI线程需要处理的操作

AsyncTask的异步任务

1、包含了一系列的回调方法来在子线程中去完成耗时操作,并将结果返回给主线程去刷新UI
2、作为不是大神的我们只需要继承AsyncTask,提供三个泛型参数,实现这几个回调方法即可。
3、调用execute(params)方法来执行这个异步任务

AsyncTask的使用步骤

1、创建子类继承AsyncTask
2、复写AsyncTask的抽象方法,完成耗时操作并刷新UI
3、调用AsyncTask.execute(String params)方法执行异步任务

AsyncTask的周期

1、onPreExecute
    第一个被调用的方法
    在UI线程中执行
    做后台任务启动前的准备工作
2、doInBackground
    第二个调用的方法
    在子线程中执行,处理耗时操作,并将结果返回给pnPostExecute
    这个方法是由系统调用,不用人为的去调用,入参是第一个参数的泛型参数,返回值对应第三个泛型参数
3、onProgressUpdate
    第三个调用的方法
    需要在doInBackGround中调用publishProgress方法,才会调用,入参是第二个泛型参数
4、onPostExecute
    第四个被调用的方法
    在UI线程中执行,入参就是doInBackGround的返回值

AsyncTaskDemo

class MyTask extends AsyncTask<String,Void,byte[]>{

    /**
    在主线中执行,做一些准备工作
    */
    protected void onPreExecute(){
        super.onPreExecute();

}
    /**
    这个方法在子线程中执行,入参是第一个参数泛型,返回第三个参数泛型
    */
    protected byte[] doInBackground(String...params){
        return null;
}

    /**
        这个方法在主线程中执行,入参是DoInBackGround的返回值   
    */
    protected void onPostExecute(byte[] result){
        super.onPostExecute(result);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值