安卓系统中的多线程下载怎么利用AsyncTask实现

  

android中的多线程下载怎么利用AsyncTask实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

01效果图

 android中的多线程下载怎么利用AsyncTask实现

02核心类——DownloadTask。类

公共类DownloadTask AsyncTask<延伸;字符串,整数,Integer>{   公共静态最终int TYPE_SUCCESS=0;   公共静态最终int TYPE_FAILURE=1;   公共静态最终int TYPE_PAUSE=2;   公共静态最终int TYPE_CANCEL=3;      公共int positionDownload;      私人布尔isPaused=false;   私人布尔isCancelled=false;      私人DownloadListener DownloadListener;   私人int lastProgress;      公共DownloadTask (DownloadListener DownloadListener) {   这一点。downloadListener=downloadListener;   }      公共空间setDownloadListener (DownloadListener DownloadListener) {   这一点。downloadListener=downloadListener;   }      @Override   保护整数doInBackground(字符串…params) {   InputStream是=零;   RandomAccessFile savedFile=零;   文件文件=零;      长downloadLength=0;   字符串downloadUrl=params [0];   positionDownload=Integer.parseInt (params [1]);   字符串文件名=downloadUrl.substring (downloadUrl.lastIndexOf (“/?);   字符串目录=Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS) .getPath ();   文件=新文件(目录+文件名);      如果(file.exists ()) {   downloadLength=file.length ();   }      长contentLength=getContentLength (downloadUrl);   如果(contentLength==0) {   返回TYPE_FAILURE;   }else if (contentLength==downloadLength) {   返回TYPE_SUCCESS;   }      OkHttpClient客户=new OkHttpClient ();   请求请求=new Request.Builder ()   .addHeader (“RANGE",“字节=? downloadLength +“产生绯闻。)   .url (downloadUrl)   .build ();   尝试{   响应响应=client.newCall(请求). execute ();   如果(响应!=null) {=response.body () .byteStream ();   savedFile=新RandomAccessFile(文件,“rw");   savedFile.seek (downloadLength);   byte[]新字节缓冲区=[1024];   int总=0;   int长度;      在((长度=is.read(缓冲))!=1){   如果(isCancelled) {   .close response.body () ();   返回TYPE_CANCEL;   }else if (isPaused) {   .close response.body () ();   返回TYPE_PAUSE;   }      +=总长度;   savedFile。写(缓冲区,0,长度);      int进步=(int)((总+ downloadLength) * 100/contentLength);   int currentDownload=(int)(总+ downloadLength);   currentDownload publishProgress (positionDownload进步(int) contentLength);   }      .close response.body () ();   返回TYPE_SUCCESS;   }   }捕捉(IOException e) {   e.printStackTrace ();   最后}{   尝试{   如果(!=null) is.close ();   如果(savedFile !=null) savedFile.close ();   如果(isCancelled,,文件!=null) file.delete ();   }捕捉(IOException e) {   e.printStackTrace ();   }   }      返回TYPE_FAILURE;   }      @Override   保护空白>公共类DownloadService延伸服务{   私人Map<字符串,DownloadTask>,downloadTaskMap=new HashMap<的在();      私人DownloadBinder mBinder=new DownloadBinder ();      @Override   公共内部>关于android中的多线程下载怎么利用AsyncTask实现问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

安卓系统中的多线程下载怎么利用AsyncTask实现