异步管理机制--Asynctask详解

来源:互联网 发布:linux下python环境 编辑:程序博客网 时间:2024/06/04 20:01

异步管理机制–Asynctask详解

本文参考:

  • android开发者官网
  • Android AsyncTask完全解析,带你从源码的角度彻底理解
  • Android 多线程—–AsyncTask详解
  • Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
  • 译文:Android中糟糕的AsyncTask
  • Android AsyncTask 原理浅析
  • Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)
  • Android 异步AsyncTask下载 含有进度条
  • Android使用AsyncTask实现可以断点续传的DownloadManager功能
  • android中如何下载文件并显示下载进度

DownloadFilesTask.java

public class DownloadFilesTask extends Activity implements OnClickListener{    private ProgressDialog progressDialog= null;    private ProgressBar progressBar;    private Button downloadBt;    static class Downloader{        static long downloadFile(URL url){            long i = 0;            try {                sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            i+=1;           return i;        }    }    private class DownloadFiles extends AsyncTask<URL, Integer, Long> {        protected void onPreExecute() {            progressDialog.show(); // 显示进度对话框        }        @Override        protected Long doInBackground(URL... urls) {            int count = urls.length;            long totalSize = 0;            for (int i = 0; i < count; i++) {                totalSize += Downloader.downloadFile(urls[i]);                publishProgress((int) (((i+1) / (float) count) * 100));                // Escape early if cancel() is called                if (isCancelled()) break;            }            return totalSize;        }        @Override        protected void onProgressUpdate(Integer... progress) {//            setProgressPercent(progress[0]);            progressBar.setProgress(progress[0]);        }        @Override        protected void onPostExecute(Long result) {            super.onPostExecute(result);            Toast.makeText(DownloadFilesTask.this, "下载完成,总量为"+result, Toast.LENGTH_SHORT).show();            downloadBt.setEnabled(true);            //消失弹出框            progressDialog.dismiss();            progressBar.setProgress(0);        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_download_files_task);        downloadBt = (Button) findViewById(R.id.downloudBt);        downloadBt.setOnClickListener(this);    }    @Override    public void onClick(View v) {        // TODO Auto-generated method stub            //注意每次需new一个实例,新建的任务只能执行一次,否则会出现异常//            download.setEnabled(false);        progressDialog = new ProgressDialog(this);        progressDialog.setTitle("提示信息");        progressDialog.setMessage("正在下载中,请稍后......");        //    设置setCancelable(false); 表示我们不能取消这个弹出框,等下载完成之后再让弹出框消失        progressDialog.setCancelable(false);        //    设置ProgressDialog样式为圆圈的形式        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);        progressBar = (ProgressBar) findViewById(R.id.progress_bar);        URL url1 = null;        try {            url1 = new URL(getString(R.string.test_mp3));        } catch (MalformedURLException e) {            e.printStackTrace();        }        URL url2 = null;        try {            url2 = new URL(getString(R.string.test_mp3));        } catch (MalformedURLException e) {            e.printStackTrace();        }        URL url3 = null;        try {            url3 = new URL(getString(R.string.test_mp3));        } catch (MalformedURLException e) {            e.printStackTrace();        }        new DownloadFiles().execute(url1, url2, url3);    }}

layout/activity_download_files_task.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <Button        android:id="@+id/downloudBt"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="下载" />    <ProgressBar        android:id="@+id/progress_bar"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:progress="0"        android:max="100"        android:layout_alignParentBottom="true"        style="?android:attr/progressBarStyleHorizontal"/></RelativeLayout>
0 0
原创粉丝点击