《第一行代码》学习笔记37-服务Service(4)

一个比较完整的自定义AsyncTask写成如下:

class DownloadTask extends AsyncTask<Void, Integer, Boolean> {
    
    @Override
    protected void onPreExecute() {
        progressDialog.show(); //显示进度对话框
    }
    
    @Override
    protected Boolean doInBackground(Void...params) {
        try {
            while (true) {
                int downloadPercent = doDownload(); //这是一个虚构的方法
                publishProgress(downloadPercent);
                if (downloadPercent >= 100) {
                    break;
                }
            }
        } catch (Exception e) {
            return false;
        }
        return true;
    }
    
    @Override
    protected void onProgressUpdate(Integer...values) {
        //在这里更新下载进度
        progressDialog.setMessage("Downloaded" + values[0] + "%");
    }
    
    @Override
    protected void onPostExecute(Boolean result) {
        progressDialog.dismiss(); //关闭进度对话框
        //在这提示下载结果
        if (result) {
            Toast.makeText(context, "Download succeeded", Toast.LENGTH_SHORT).show();
        }
    }
}

使用AsyncTask的诀窍:在doInBackground()方法中去执行具体的耗时任务,在onProgressUpdate()方法中进行UI操作,在
onPostExecute()方法中执行一些任务的收尾工作。

原文地址:https://www.cnblogs.com/Iamasoldier6/p/5048298.html