AsyncTask解析

本文详细介绍了Android中的AsyncTask类,包括其三个泛型参数的意义:Params为执行AsyncTask时需要传入的参数,Progress为更新进度的单位,Result为耗时操作的结果。同时,还解析了AsyncTask中的四个关键方法:onPreExecute()、doInBackground()、onPostExecute()及onProgressUpdate()的作用及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

11、参数说明

public class MyAsyncTask extends AsyncTask<String,Void,String> {

}

1) Params
在执行AsyncTask时需要传入的参数,也是doInBackground()的参数。
2) Progress
后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位,是onProgressUpdate()的参数类型。
3) Result
是执行完耗时操作后返回的结果,即doInBackground()返回的结果,也是onPostExecute()的参数类型。

2、方法说明

public class MyAsyncTask extends AsyncTask<String,Integer,String> {

    /**
     * 这个方法会在后台任务开始执行之间调用,用于进行一些界面上的初始化操作,比如显示一个进度条对话框等。
     */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    /**
     * 执行耗时操作的地方,要使用asyncTask就必须重写该方法,注意该方法中不能更新UI
     * @param strings
     * @return
     */
    @Override
    protected String doInBackground(String... strings) {
        return null;
    }

    /**
     *执行完耗时操作后执行该方法
     * @param s doInBackground返回值
     */
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
//        publishProgress();
    }

    /**
     *当在后台任务中调用了publishProgress(Progress...)方法后,这个方法就很快会被调用,在这个方法中可以对UI进行操作,利用参数中的数值就可以对界面元素进行相应的更新。
     * @param values
     */
    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }
}

执行任务时只需

 MyAsyncTask myAsyncTask = new MyAsyncTask();
 myAsyncTask.execute("");

注意

  • 1、AsyncTask对象必须在主线程创建;execute方法需要在UI线程调用;一个AsyncTask对象只能调用一次

  • 2、当一个App旋转时,整个Activity会被销毁和重建。当Activity重启时,AsyncTask中对该Activity的引用是无效的,因此onPostExecute()就不会起作用,若AsynTask正在执行,折会报 view not attached to window manager 异常

  • 3、同样也是生命周期的问题,在 Activity的onDestory()方法中调用Asyntask.cancal方法,让二者的生命周期同步

  • 4、为了避免AsyncTask内存泄漏,AsyncTask尽量使用静态内部类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值