您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页【安卓学习笔记】AsyncTask异步任务

【安卓学习笔记】AsyncTask异步任务

来源:二三四教育网
异步任务调用流程

要点:

  1. 安卓处理异步任务两种方法:Handler、AsyncTask。Handler在中已经记录。相对来说,AsyncTask对于异步任务处理要更加灵活,尤其是复杂多线程情况;
  1. AsyncTask执行步骤:
    2.1 先继承AsyncTask<Params, Progress, Result>抽象类,它有三个参数,分别代表:启动任务输入的参数,后台任务进度,任务完成后返回结果。这三个参数属于泛型,具体Integer、String等,由用户自定义,但要和其子函数进行对应。
    2.2 主线程中调用execute(Params... params)启动任务,注意这里的Params参数类型和2.1中对应,...代表可任意多个参数。
    2.3 execute执行后,会调用onPreExecute(),此函数可对UI进行操作
    2.4 接着doInBackground(Params... params)运行与后台,进行耗时操作。此函数中可接受execute传过来的参数。且可调用publishProgress(Progress... values),传递进度。
    2.5 publishProgress被调用后,会调用onProgressUpdate(Progress... values),这里可以对UI进行操作更新进度。同样Progress... values和前面对应。
    2.6 最后,当doInBackground执行完后,其会返回一个Result,并调用onPostExecute(Result result),在此函数中可对结果进行处理,并更新UI。
    2.7 AsyncTask在执行过程中,可在主线程中,调用cancel(true)函数进行取消异步任务。调用该函数后,会调用onCancelled()函数,在该函数中可更新UI。

主线程

//实例化异步class,传进去一个imageView和一个progressBar
MyAsyncTask task = new MyAsyncTask(imageView,progressBar);
//启动任务,1000是传给线程的参数,这里随便写的
task.execute(1000);

异步任务类

public class MyAsyncTask extends AsyncTask<Integer,Integer,String>{
    private ImageView imageView;
    private ProgressBar progressBar;
    
    public MyAsyncTask(ImageView imageView,ProgressBar progressBar){
        this.imageView = imageView;
        this.progressBar = progressBar;
    }

    @Override
    protected String doInBackground(Integer... params) {
            
        MyThread mThread = new MyThread();
        for(int i=0;i<=100;i+=10){
            mThread.delayThread();
            publishProgress(i);
        }           
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        
        imageView.setImageResource(R.drawable.people4);
        super.onPostExecute(result);
    }

    @Override
    protected void onPreExecute() {
        imageView.setImageResource(R.drawable.people1);
        super.onPreExecute();
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        progressBar.setProgress(values[0]);
    }

}

参考:

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务