【Android】使用AsyncTask模拟进度条

AsyncTask的简介

AsyncTask可以用来处理一些后台较耗时的任务,查看源码发现其内部就是一个Handler和线程池的封装,可以帮助我们处理耗时任务的同时去更新UI

AsyncTask三个参数

AsyncTask<Params, Progress, Result>
Params 启动任务执行的输入参数,比如下载URL
Progress 后台任务执行的百分比,比如下载进度
Result 后台执行任务最终返回的结果,比如下载结果

AsyncTask的几个函数

  • onPreExecute():(运行在UI线程中) (非必须方法,可以不用实现)
    在任务没被线程池执行之前调用,通常用来做一些准备操作,比如下载文件任务执行前,在这个方法中显示一个进度条。

  • doInBackground(Params… params):(运行在子线程中)(此函数是抽象函数必须实现)
    在任务被线程池执行时调用 ,可以在此方法中处理比较耗时的操作,比如下载文件等等。

  • onProgressUpdate(Progress… values) (运行在UI线程中) (非必须方法,可以不用实现)
    此函数是任务在线程池中执行处于Running状态,回调给UI主线程的进度,比如上传或者下载进度。

  • onPostExecute(Result result)(运行在UI线程中) (非必须方法,可以不用实现)
    此函数代表任务在线程池中执行结束了,回调给UI主线程的结果。比如下载结果。

  • onCancelled(Result result)onCancelled()任务关闭的函数

例子的实现

自定义AsyncTask

/**
 * 输入、进度、以及输出
 * 输入对应的是:async.execute()
 * 进度对应的是:onProgressUpdate(Integer... values)
 * 输出对应的是:protected String doInBackground   返回值是String
 */
class myAsync extends AsyncTask<Integer, Integer, String> {
   
    private Context context;
    private ProgressBar progressBar;

    public myAsync(Context context, ProgressBar progressBar) {
   
        this.context = context;
        this.progressBar = progressBar;
    }

    //在这里模拟进度条的增长
    //该方法不运行在UI线程中,主要用于异步操作,通过调用publishProgress()方法  
    //触发onProgressUpdate对UI进行操作 
    @Override
    protected String doInBackground(Integer... integers) {
   
        int i = 0;
        publishProgress(i);
        for (i = 0;i<=100;<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值