iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android使用AsyncTask实现多线程下载的方法
  • 877
分享到

Android使用AsyncTask实现多线程下载的方法

多线程下载方法asynctask多线程线程Android 2022-06-06 08:06:04 877人浏览 安东尼
摘要

本文实例讲述了Android使用AsyncTask实现多线程下载的方法。分享给大家供大家参考,具体如下: public class MainActivity extends

本文实例讲述了Android使用AsyncTask实现多线程下载的方法。分享给大家供大家参考,具体如下:


public class MainActivity extends Activity implements OnClickListener {
  private Button btn1, btn2, btn3;
  private ProgressBar progressBar1, progressBar2, progressBar3;
  private ImageView img1, img2, img3;
  private static final String IMG_URI = "//www.jb51.net/images/loGo.gif";
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    initListener();
  }
  
  private void initListener() {
    btn1.setOnClickListener(this);
    btn2.setOnClickListener(this);
    btn3.setOnClickListener(this);
  }
  
  private void initView() {
    btn1 = (Button) findViewById(R.id.btn1);
    btn2 = (Button) findViewById(R.id.btn2);
    btn3 = (Button) findViewById(R.id.btn3);
    progressBar1 = (ProgressBar) findViewById(R.id.progressbar1);
    progressBar2 = (ProgressBar) findViewById(R.id.progressbar2);
    progressBar3 = (ProgressBar) findViewById(R.id.progressbar3);
    img1 = (ImageView) findViewById(R.id.img1);
    img2 = (ImageView) findViewById(R.id.img2);
    img3 = (ImageView) findViewById(R.id.img3);
  }
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }
  @Override
  public void onClick(View arg0) {
    // 点击按钮模拟下载
    MyDownloadAsy down = new MyDownloadAsy();
    down.execute(IMG_URI, arg0.getId() + "");
  }
  
  class MyDownloadAsy extends AsyncTask<String, Integer, Bitmap> {
    private static final String TAG = "asy";
    private int clickBtn = 0;
    private void i(String object) {
      Log.i(TAG, object);
    }
    @Override
    protected void onPreExecute() {
      // TODO Auto-generated method stub
      super.onPreExecute();
      i("準備運行線程");
      progressBar1.setProgress(0);// 进度条复位
      progressBar2.setProgress(0);// 进度条复位
      progressBar3.setProgress(0);// 进度条复位
    }
    @Override
    protected Bitmap doInBackground(String... arg0) {
      switch (Integer.parseInt(arg0[1])) {
      case R.id.btn1:
        clickBtn = 1;
        break;
      case R.id.btn2:
        clickBtn = 2;
        break;
      case R.id.btn3:
        clickBtn = 3;
        break;
      default:
        break;
      }
      i("正在后台执行");
      publishProgress(0);
      // 下载图片
      HttpClient hc = new DefaultHttpClient();
      // 等待2s
      sleepWait();
      publishProgress(50);
      HttpGet hg = new HttpGet(arg0[0]);// 获取jb51的logo
      final Bitmap bm;
      try {
        HttpResponse hr = hc.execute(hg);
        bm = BitmapFactory.decodeStream(hr.getEntity().getContent());
      } catch (Exception e) {
        return null;
      }
      sleepWait();
      publishProgress(100);
      // mImageView.setImageBitmap(result); 不能在后台线程操作ui
      return bm;
    }
    
    private void sleepWait() {
      try {
        Thread.sleep(2000);
      } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }
    }
    protected void onProgressUpdate(Integer... values) {
      // 动态更新
      i("進度更新");
      switch (clickBtn) {
      case 1:
        progressBar1.setProgress(values[0]);// 更新进度条的进度
        break;
      case 2:
        progressBar2.setProgress(values[0]);// 更新进度条的进度
        break;
      case 3:
        progressBar3.setProgress(values[0]);// 更新进度条的进度
        break;
      default:
        break;
      }
    }
    protected void onPostExecute(Bitmap result) {
      // TODO Auto-generated method stub
      super.onPostExecute(result);
      i("线程执行完成");
      if (result != null) {
        i("下载图片成功");
        switch (clickBtn) {
        case 1:
          img1.setImageBitmap(result);
          break;
        case 2:
          img2.setImageBitmap(result);
          break;
        case 3:
          img3.setImageBitmap(result);
          break;
        default:
          break;
        }
      } else {
        i("下载图片失败");
      }
    }
    @Override
    protected void onCancelled() {
      // TODO Auto-generated method stub
      super.onCancelled();
      i("取消线程");
      switch (clickBtn) {
      case 1:
        progressBar1.setProgress(0);// 进度条复位
        break;
      case 2:
        progressBar2.setProgress(0);// 进度条复位
        break;
      case 3:
        progressBar3.setProgress(0);// 进度条复位
        break;
      default:
        break;
      }
    }
  }
}

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"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context=".MainActivity" >
  <TableLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_centerHorizontal="true" >
    <TableRow>
      <Button
        android:id="@+id/btn1"
        android:text="@string/btn1" />
      <ProgressBar
        android:id="@+id/progressbar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
      <ImageView
        android:id="@+id/img1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@id/img1"
        android:src="@drawable/ic_launcher" />
    </TableRow>
    <TableRow>
      <Button
        android:id="@+id/btn2"
        android:text="@string/btn2" />
      <ProgressBar
        android:id="@+id/progressbar2"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
      <ImageView
        android:id="@+id/img2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@id/img2"
        android:src="@drawable/ic_launcher" />
    </TableRow>
    <TableRow>
      <Button
        android:id="@+id/btn3"
        android:text="@string/btn3" />
      <ProgressBar
        android:id="@+id/progressbar3"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
      <ImageView
        android:id="@+id/img3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@id/img3"
        android:src="@drawable/ic_launcher" />
    </TableRow>
  </TableLayout>
</RelativeLayout>

AndroidManifast:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.xunfang.asynctackdemo"
  android:versionCode="1"
  android:versionName="1.0" >
  <uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="10" />
  <!-- 访问网络的权限 -->
  <uses-permission android:name="android.permission.INTERNET" >
  </uses-permission>
  <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
      android:name="com.xunfang.asynctackdemo.MainActivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
</manifest>

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android调试技巧与常见问题解决方法汇总》、《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:android教程之使用asynctask在后台运行耗时任务Android带进度条的文件上传示例(使用AsyncTask异步任务)Android中AsyncTask异步任务使用详细实例(一)Android中使用AsyncTask实现文件下载以及进度更新提示Android 中使用 AsyncTask 异步读取网络图片Android中使用AsyncTask实现下载文件动态更新进度条功能Android使用AsyncTask下载图片并显示进度条功能详解Android中AsyncTask的使用方法Android AsyncTask详解及使用方法Android中AsyncTask的入门使用学习指南


--结束END--

本文标题: Android使用AsyncTask实现多线程下载的方法

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

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

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

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

下载Word文档
猜你喜欢
  • android中的多线程下载怎么利用AsyncTask实现
    android中的多线程下载怎么利用AsyncTask实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。01 效果图02 核心类 - DownloadTask.classp...
    99+
    2023-05-31
    android asynctask 多线程
  • 使用 go 实现多线程下载器的方法
    目录1.多线程下载原理2.构造一个下载器2.1 为下载器提供初始化方法3.实现下载综合调度逻辑3.1 下载文件分段3.2 子线程下载函数4. 保存下载文件函数5.完整代码本篇文章我们...
    99+
    2024-04-02
  • Android实现多线程断点下载
    目录QDownload1、如何使用1.1、导入依赖1.2、初始化下载组件1.3、核心控制器DownloadManager1.4、监听下载进度1.5、下载相关的操作1.6、应用市场ap...
    99+
    2024-04-02
  • Android入门之使用OKHttp多线程下载文件
    目录简介课程目标OkHttp的同步调用例子OkHttp的异步调用例子多线程并行下载文件需要解决的几个核心问题全代码前端后端简介 OkHttp是一个神器。OkHttp分为异步、同步两种...
    99+
    2023-01-03
    Android OKHttp下载文件 Android 下载文件 Android OKHttp
  • Android原生实现多线程断点下载实例代码
    各位父老乡亲,我单汉三又回来了,今天为大家带来一个用原生的安卓写的多线程断点下载Demo。通过本文你可以学习到: SQLite的基本使用,数据库的增删改查。 Handler的消息处理与更新UI。 Service(主要用于下载)的进阶与...
    99+
    2023-05-31
    android 断点 下载
  • Python 实现多线程文件下载
    #!/root/.pyenv/shims/python # -*- coding: UTF-8 -*- import sys import requests import threading import datetime #传入的命令行参...
    99+
    2023-01-31
    多线程 文件 Python
  • 怎么在Android中实现一个多线程下载功能
    怎么在Android中实现一个多线程下载功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。布局      &nb...
    99+
    2023-05-30
    android 多线程
  • 如何在android项目中使用多线程下载文件
    如何在android项目中使用多线程下载文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。多线程下载文件(支持暂停、取消、断点续传)多线程同时下载文件即:在同一...
    99+
    2023-05-31
    android 多线程 roi
  • 利用Python多线程实现图片下载器
    目录导语开发工具环境搭建原理简介效果展示导语 之前有很多小伙伴说想学习一下多线程图片下载器,虽然好像已经过去很久了,不过还是上来安排一波吧。至于题目为什么说是构建一个小型数据集,因为...
    99+
    2024-04-02
  • 怎么在Android应用中实现一个HTTP多线程下载功能
    本篇文章为大家展示了怎么在Android应用中实现一个HTTP多线程下载功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。多线程断点需要的功能多线程下载,支持断点。使用多线程的好处:使用多线程下载会...
    99+
    2023-05-31
    android http 多线程
  • javascript多线程的实现方法
    本篇内容介绍了“javascript多线程的实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • python多线程线程锁的使用方法
    小编给大家分享一下python多线程线程锁的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的数据类型有哪些python的数据类型:1. 数字类...
    99+
    2023-06-14
  • Android中怎么利用AsyncTask实现下载文件动态更新进度条功能
    Android中怎么利用AsyncTask实现下载文件动态更新进度条功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 泛型AysncTask<Params, Pro...
    99+
    2023-05-30
    android asynctask
  • vbs 中怎么实现多线程下载功能
    这期内容当中小编将会给大家带来有关vbs 中怎么实现多线程下载功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。代码如下:'by wankoilz url=InputBox("输入完整下...
    99+
    2023-06-08
  • Android studio下载安装使用SVN的方法
    目录Android studio使用SVN下载安装Android Studio关联SVN客户端Android studio使用SVN 在AndroidStudio中开发版本控制,除了...
    99+
    2024-04-02
  • Java实现多线程下载和断点续传
    java的多线程下载能够明显提升下载的速度,平时我们用的迅雷软件之所以能够下载那么快,就是使用了多线程;当用户在下载的过程中,有断电或断网的可能,当用户再次点击下载时,应该让用户接着...
    99+
    2024-04-02
  • Golang多线程下载器实现高效快速地下载大文件
    目录前言请求资源http1.1协议Range\Content-RangeLast-Modified\If-Modified-SinceNewRequest()http.Default...
    99+
    2023-05-19
    Golang多线程下载器 Golang下载文件
  • 怎么在Android中实现一个多线程断点续传下载功能
    本篇文章给大家分享的是有关怎么在Android中实现一个多线程断点续传下载功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、布局实现具体布局内容如下:<LinearL...
    99+
    2023-05-30
    android
  • Android中怎么利用FTP实现多线程断点续传下载上传功能
    Android中怎么利用FTP实现多线程断点续传下载上传功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。FTP下载原理FTP单线程断点续传FTP和传统的HTT...
    99+
    2023-05-30
    android
  • 怎么在Android中利用多线程实现一个断点续传下载功能
    怎么在Android中利用多线程实现一个断点续传下载功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原理其实断点续传的原理很简单,从字面上理解,所谓断点续传就是从停止的地方重...
    99+
    2023-05-31
    android 多线程 roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作