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