AsyncTask 使用,方法详解

来源:互联网 发布:mysql syntax 编辑:程序博客网 时间:2024/06/05 21:55

AsyncTask 处理异步任务比较强大的一个类

使用是注意不用是及时cancel掉任务,不要阻塞之后任务的执行


public class AsyncTaskTest {    private volatile DownloadFilesTask task;    /**     * AsyncTask<Params, Progress, Result>三个泛型参数的作用对应执行方法     * Params   doInBackground(Params... params)  异步任务参数     * Progress onProgressUpdate(Progress... values) 状态刷新参数     * Result   onPostExecute(Result result) 返回结果参数     */    private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {        @Override        protected Long doInBackground(URL... urls) {            // TODO: 17-10-31 执行耗时操作            int cunt = urls.length;            long totalSize = 0;            int percentage;            for (int i = 0; i < cunt; i++) {                URL url = urls[i];//              totalSize += Downloader.addDownload(url);//              刷新当前进度                publishProgress(Math.min(Math.max(i, 0), 100));//              如果已经被Cancelled掉及时退出,因为被Cancelled掉的不会执行onPostExecute()                if (isCancelled()) {                    break;                }            }            return totalSize;        }        @Override        protected void onProgressUpdate(Integer... values) {            super.onProgressUpdate(values);            // TODO: 17-10-31 用于刷新进度条,判断当前执行进度使用            //刷行进度需要在 doInBackground()实现方法中调用publishProgress()        }        @Override        protected void onCancelled() {            super.onCancelled();            // TODO: 17-10-31   Cancelled 的回调        }        @Override        protected void onPostExecute(Long aLong) {            super.onPostExecute(aLong);            // TODO: 17-10-31  执行返回结果        }        @Override        protected void onPreExecute() {            super.onPreExecute();            // TODO: 17-10-31 执行时调用 UI        }    }    public void startExecute(URL... url) {        // TODO: 17-10-31 execute() 是可变参数        task = new DownloadFilesTask();        task.execute(url);    }    public void Cancel(boolean mayInterruptIfRunning) {        // TODO: 17-10-31 mayInterruptIfRunning 参数的含义 如果doInBackground中的没有执行完成是否让它执行完        task.cancel(mayInterruptIfRunning);    }}

原创粉丝点击