iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >android中的多线程下载怎么利用AsyncTask实现
  • 252
分享到

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

androidasynctask多线程 2023-05-31 13:05:07 252人浏览 八月长安
摘要

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

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

01 效果图

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

02 核心类 - DownloadTask.class

public class DownloadTask extends AsyncTask<String, Integer, Integer> {  public static final int TYPE_SUCCESS = 0;  public static final int TYPE_FaiLURE = 1;  public static final int TYPE_PAUSE = 2;  public static final int TYPE_CANCEL = 3;  public int positionDownload;  private boolean isPaused = false;  private boolean isCancelled = false;  private DownloadListener downloadListener;  private int lastProgress;  public DownloadTask(DownloadListener downloadListener){    this.downloadListener = downloadListener;  }  public void setDownloadListener(DownloadListener downloadListener){    this.downloadListener = downloadListener;  }  @Override  protected Integer doInBackground(String... params) {    InputStream is = null;    RandoMaccessFile savedFile = null;    File file = null;    long downloadLength = 0;    String downloadUrl = params[0];    positionDownload = Integer.parseInt(params[1]);    String fileName = downloadUrl.substring(downloadUrl.lastIndexOf("/"));    String directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath();    file = new File(directory + fileName);    if(file.exists()){      downloadLength = file.length();    }    long contentLength = getContentLength(downloadUrl);    if(contentLength == 0){      return TYPE_FAILURE;    } else if(contentLength == downloadLength){      return TYPE_SUCCESS;    }    OkHttpClient client = new OkHttpClient();    Request request = new Request.Builder()                  .addHeader("RANGE", "bytes="+downloadLength+"-")                  .url(downloadUrl)                  .build();    try {      Response response = client.newCall(request).execute();      if(response != null){        is = response.body().byteStream();        savedFile = new RandomAccessFile(file, "rw");        savedFile.seek(downloadLength);        byte[] buffer = new byte[1024];        int total = 0;        int length;        while((length = is.read(buffer)) != -1){          if(isCancelled){            response.body().close();            return TYPE_CANCEL;          } else if(isPaused) {            response.body().close();            return TYPE_PAUSE;          }          total += length;          savedFile.write(buffer, 0, length);          int progress = (int) ((total + downloadLength) * 100 / contentLength);          int currentDownload = (int) (total + downloadLength);          publishProgress(positionDownload, progress, currentDownload, (int) contentLength);        }        response.body().close();        return TYPE_SUCCESS;      }    } catch (IOException e) {      e.printStackTrace();    } finally {      try {        if(is != null) is.close();        if(savedFile != null) savedFile.close();        if(isCancelled && file != null) file.delete();      } catch (IOException e) {        e.printStackTrace();      }    }    return TYPE_FAILURE;  }  @Override  protected void onProgressUpdate(Integer... values) {    int progress = values[1];    if(progress > lastProgress){      downloadListener.onProgress(values[0], progress, values[2], values[3]);      lastProgress = progress;    }  }  @Override  protected void onPostExecute(Integer status) {    switch (status){      case TYPE_SUCCESS:        downloadListener.onSuccess(positionDownload);        break;      case TYPE_FAILURE:        downloadListener.onFailure();        break;      case TYPE_PAUSE:        downloadListener.onPause();        break;      case TYPE_CANCEL:        downloadListener.onCancel();        break;    }  }  public void pauseDownload(){    isPaused = true;  }  public void cancelDownload(){    isCancelled = true;  }  private long getContentLength(String downloadUrl) {    OkHttpClient client = new OkHttpClient();    Request request = new Request.Builder()                  .url(downloadUrl)                  .build();    Response response = null;    try {      response = client.newCall(request).execute();      if(response != null && response.isSuccessful()){        long contentLength = response.body().contentLength();        response.body().close();        return contentLength;      }    } catch (IOException e) {      e.printStackTrace();    }    return 0;  }}

--结束END--

本文标题: android中的多线程下载怎么利用AsyncTask实现

本文链接: https://www.lsjlt.com/news/225759.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • android中的多线程下载怎么利用AsyncTask实现
    android中的多线程下载怎么利用AsyncTask实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。01 效果图02 核心类 - DownloadTask.classp...
    99+
    2023-05-31
    android asynctask 多线程
  • Android中怎么利用AsyncTask实现下载文件动态更新进度条功能
    Android中怎么利用AsyncTask实现下载文件动态更新进度条功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 泛型AysncTask<Params, Pro...
    99+
    2023-05-30
    android asynctask
  • Android实现多线程断点下载
    目录QDownload1、如何使用1.1、导入依赖1.2、初始化下载组件1.3、核心控制器DownloadManager1.4、监听下载进度1.5、下载相关的操作1.6、应用市场ap...
    99+
    2024-04-02
  • Android中怎么利用FTP实现多线程断点续传下载上传功能
    Android中怎么利用FTP实现多线程断点续传下载上传功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。FTP下载原理FTP单线程断点续传FTP和传统的HTT...
    99+
    2023-05-30
    android
  • 怎么在Android中利用多线程实现一个断点续传下载功能
    怎么在Android中利用多线程实现一个断点续传下载功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原理其实断点续传的原理很简单,从字面上理解,所谓断点续传就是从停止的地方重...
    99+
    2023-05-31
    android 多线程 roi
  • 怎么在Android中实现一个多线程下载功能
    怎么在Android中实现一个多线程下载功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。布局      &nb...
    99+
    2023-05-30
    android 多线程
  • Android中怎么利用同步锁实现多线程
    Android中怎么利用同步锁实现多线程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、同步机制关键字synchronized 对于Java来说,最常用的同步机制就是sync...
    99+
    2023-05-30
    android
  • 利用Python多线程实现图片下载器
    目录导语开发工具环境搭建原理简介效果展示导语 之前有很多小伙伴说想学习一下多线程图片下载器,虽然好像已经过去很久了,不过还是上来安排一波吧。至于题目为什么说是构建一个小型数据集,因为...
    99+
    2024-04-02
  • 怎么在Android应用中实现一个HTTP多线程下载功能
    本篇文章为大家展示了怎么在Android应用中实现一个HTTP多线程下载功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。多线程断点需要的功能多线程下载,支持断点。使用多线程的好处:使用多线程下载会...
    99+
    2023-05-31
    android http 多线程
  • vbs 中怎么实现多线程下载功能
    这期内容当中小编将会给大家带来有关vbs 中怎么实现多线程下载功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。代码如下:'by wankoilz url=InputBox("输入完整下...
    99+
    2023-06-08
  • 怎么在Android中实现一个多线程断点续传下载功能
    本篇文章给大家分享的是有关怎么在Android中实现一个多线程断点续传下载功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、布局实现具体布局内容如下:<LinearL...
    99+
    2023-05-30
    android
  • android多线程怎么实现
    在Android中实现多线程的方式有以下几种:1. 使用Thread类:使用Thread类创建一个新的线程,重写run()方法来定义...
    99+
    2023-09-23
    android
  • Android中怎么利用ListView实现下拉加载功能
    Android中怎么利用ListView实现下拉加载功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。MyListView.Javapublic class&nb...
    99+
    2023-05-30
    listview android
  • Android原生实现多线程断点下载实例代码
    各位父老乡亲,我单汉三又回来了,今天为大家带来一个用原生的安卓写的多线程断点下载Demo。通过本文你可以学习到: SQLite的基本使用,数据库的增删改查。 Handler的消息处理与更新UI。 Service(主要用于下载)的进阶与...
    99+
    2023-05-31
    android 断点 下载
  • Android应用中的断点下载功能怎么利用HttpURLConnection实现
    Android应用中的断点下载功能怎么利用HttpURLConnection实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。HttpCilent 跟 HttpURLConne...
    99+
    2023-05-31
    android httpurlconnection roi
  • Python 实现多线程文件下载
    #!/root/.pyenv/shims/python # -*- coding: UTF-8 -*- import sys import requests import threading import datetime #传入的命令行参...
    99+
    2023-01-31
    多线程 文件 Python
  • Android利用DownloadManager实现文件下载
    Android中文件下载,app更新,我们一般利用的都是 Retrofit或者 Okhttp等实现,但其实Android 早在API 9之后,就为我们提供了DownLoadManag...
    99+
    2024-04-02
  • 在Java项目中如何利用多线程实现文件下载功能
    这篇文章将为大家详细讲解有关在Java项目中如何利用多线程实现文件下载功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体内容如下import java.io.File; import j...
    99+
    2023-05-31
    java 多线程 文件下载
  • 怎么在Android应用中实现一个网络多线程断点续传下载功能
    怎么在Android应用中实现一个网络多线程断点续传下载功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。原理多线程下载的原理就是将要下载的文件分成若干份,其中...
    99+
    2023-05-31
    android 断点续传 多线程
  • Java中怎么利用Synchronized实现多线程同步
    这期内容当中小编将会给大家带来有关Java中怎么利用Synchronized实现多线程同步,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用同步的原因 在系统中对访类要使用多线程进行访问; 在该类中有 类...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作