1. 参考此blog写的非常的好
    http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html

MainActivity.java

  1. import android.support.v7.app.AppCompatActivity;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.widget.Button;
  5. import android.widget.ProgressBar;
  6. import android.widget.TextView;
  7.  
  8. public class MainActivity extends AppCompatActivity {
  9.  
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14.  
  15. Button button = (Button)findViewById(R.id.button_downLoad);
  16. final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar);
  17. final TextView textView = (TextView) findViewById(R.id.textView_hello);
  18. final ProgressBar progressBar2 = (ProgressBar)findViewById(R.id.progressBar2);
  19.  
  20. button.setOnClickListener(new View.OnClickListener() {
  21. @Override
  22. public void onClick(View v) {
  23. ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar, progressBar2);//传进去需要改变的控件
  24. asyncTask.execute(55);//传入初始参数(这里表示将从55开始计数)
  25. }
  26. });
  27.  
  28. }
  29. }

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  4. android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
  5. android:paddingRight="@dimen/activity_horizontal_margin"
  6. android:paddingTop="@dimen/activity_vertical_margin"
  7. android:paddingBottom="@dimen/activity_vertical_margin"
  8. android:orientation="vertical"
  9. android:gravity="center_horizontal"
  10. tools:context=".MainActivity">
  11.  
  12. <TextView
  13. android:text="Hello World!"
  14. android:id="@+id/textView_hello"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content" />
  17.  
  18. <ProgressBar
  19. style="?android:attr/progressBarStyleHorizontal"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:id="@+id/progressBar"
  23. android:layout_gravity="center_horizontal" />
  24.  
  25. <ProgressBar
  26. style="?android:attr/progressBarStyleHorizontal"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:id="@+id/progressBar2"
  30. android:progress="100"
  31. android:layout_gravity="center_horizontal" />
  32.  
  33. <Button
  34. android:layout_width="wrap_content"
  35. android:layout_height="wrap_content"
  36. android:text="Download"
  37. android:id="@+id/button_downLoad"
  38. android:layout_gravity="center_horizontal" />
  39.  
  40. </LinearLayout>
  1. ProgressBarAsyncTask.java
  1. package com.turtle920.tread;
  2.  
  3. import android.os.AsyncTask;
  4. import android.widget.ProgressBar;
  5. import android.widget.TextView;
  6.  
  7. public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {
  8. /*Params 启动任务执行的输入参数,比如HTTP请求的URL。由主线程中的asyncTask.execute(55);传入
  9. Progress 后台任务执行的百分比。
  10. Result 后台执行任务最终返回的结果,比如String。*/
  11. private TextView textView;
  12. private ProgressBar progressBar;
  13. private ProgressBar progressBar2;
  14.  
  15. public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar, ProgressBar progressBar2) {
  16. super();
  17. this.textView = textView;
  18. this.progressBar = progressBar;
  19. this.progressBar2 = progressBar2;
  20. }
  21.  
  22. /**
  23. * 这里的Integer参数对应AsyncTask中的第一个参数
  24. * 这里的String返回值对应AsyncTask的第三个参数
  25. * 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改
  26. * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作
  27. */
  28. @Override
  29. protected String doInBackground(Integer... params) {//...表示可以传若干参数
  30. NetOperator netOperator = new NetOperator();
  31. int i = params[0];//由主线程中的asyncTask.execute(55);传入
  32. for (i = params[0]; i <= 100; i+=1) {
  33. netOperator.operator();
  34. publishProgress(i, 100-i);//传两个参数给onProgressUpdate
  35. }
  36. return "" + i + " " + params[0].intValue() + "****";//传参数给onPostExecute
  37. }
  38.  
  39. /**
  40. *该方法运行在UI线程当中,并且运行在UI线程当中 可以对UI空间进行设置
  41. */
  42. @Override
  43. protected void onPreExecute() {
  44. textView.setText("开始执行异步线程");
  45. }
  46.  
  47. /**
  48. * 这里的Intege参数对应AsyncTask中的第二个参数
  49. * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行
  50. * onProgressUpdate是在UI线程中执行,所有可以对UI空间进行操作
  51. */
  52. @Override
  53. protected void onProgressUpdate(Integer... values) {//参数来自publishProgress()
  54. int value = values[0];
  55. int value1 = values[1];
  56. progressBar.setProgress(value);
  57. progressBar2.setProgress(value1);
  58. textView.setText(""+value+"% "+value1);
  59. }
  60.  
  61. /**
  62. * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值)
  63. * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置
  64. */
  65. @Override
  66. protected void onPostExecute(String result) {//参数来自doInBackground() return
  67. textView.setText("异步操作执行结束" + result);
  68. }
  69.  
  70. }
  1. NetOperator.java
  1. package com.turtle920.tread;
  2.  
  3. //模拟网络环境
  4. public class NetOperator {
  5.  
  6. public void operator(){
  7. try {
  8. //休眠
  9. Thread.sleep(10);
  10. } catch (InterruptedException e) {
  11. // TODO Auto-generated catch block
  12. e.printStackTrace();
  13. }
  14. }
  15.  
  16. }
  1.  

android中asynctask的使用实例的更多相关文章

  1. Android中AsyncTask异步

    今天我们学习了 AsyncTack, 这是一个异步任务. 那么这个异步任务可以干什么呢? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗 ...

  2. Android中AsyncTask的使用 (包含文件的下载与存储)

    今天看到大神写的相关详解Android中AsyncTask的使用,真的很是佩服,下面我将学习到的AsynTask知识运用到项目中,其中也涉及一些文件的下载与存储到本地 啥都不说了,直接上代码,我将对其 ...

  3. Android中AsyncTask使用具体解释

    在Android中我们能够通过Thread+Handler实现多线程通信.一种经典的使用场景是:在新线程中进行耗时操作.当任务完毕后通过Handler向主线程发送Message.这样主线程的Handl ...

  4. 详解Android中AsyncTask的使用

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...

  5. 具体解释Android中AsyncTask的使用

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式须要为每个任务创建一个新的线程,任务完毕后通过Handler实例向UI线程发送消息,完毕界面的更新 ...

  6. Android中AsyncTask的简单用法 .

    在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.在单线程模型中始终要记住两条法则: 1. 不要阻塞UI线程 2. 确保只 ...

  7. Android中AsyncTask的使用

    原文 https://blog.csdn.net/liuhe688/article/details/6532519 在Android中实现异步任务机制有两种方式,Handler和AsyncTask. ...

  8. 并发编程之Android中AsyncTask使用详解(四)

    更多Android高级架构进阶视频免费学习请点击:[https://space.bilibili.com/474380680] 在Android中我们可以通过Thread+Handler实现多线程通信 ...

  9. Android笔记(三十五) Android中AsyncTask

    AsyncTask<Params,Progress,Result> 是一个抽象类,通常继承这个抽象类需要指定如下几个泛型参数: 1.  Params :启动任务时出入参数的类型 2.  P ...

随机推荐

  1. 【P3254】圆桌问题(最大流,洛谷)

    看到题目,产生第一反应,是否可以匹配的是这么多.那么连边跑一遍最大流就行了. 从源点向每个单位连一条长度为l的边,然后所有单位和餐桌分别连边,流量为1,所有餐桌向汇点连边,流量为餐桌容量.然后跑一遍最 ...

  2. Makefile文件应用——huge项目

    提高复用性 在build目录下,保存公用部分make.rule (1)绝对路径 用ROOT变量保存项目根目录 (2)增加控制变量 EXE/LIB/ (3)头文件查找目录 gcc 的-I(i的大写)选项 ...

  3. DATASTAGE中ODBC连接的配置

    修改2个配置文件: cat /mistel/IBM/InformationServer/Server/DSEngine/.odbc.ini cat /mistel/IBM/InformationSer ...

  4. hibernate的多对多配置

    Teacher.java package com.xiaostudy.domain; import java.util.HashSet; import java.util.Set; /** * Tea ...

  5. ftp禁止切换回上级目录

    打开并编辑/etc/vsd/vsd.conf # vi /etc/vsd/vsftpd.conf 取消如下行注释 chroot_list_enable=YES 保存并重启vsftpd # /etc/i ...

  6. 计算机网络 - IP和端口

    计算机网络分层模型 OSI分层模型:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层: TCP/IP分层模型:物理+数据链路层.网络层.传输层.应用层: IP地址 IP地址是一个32位的整数 ...

  7. JavaScript tips —— 谈谈数组乱序

    前言 先看一个段代码 function randArr (arr) { return arr.sort(() => { return (Math.random() - 0.5); }); } 目 ...

  8. Pycharm for mac 快捷键

    cmd b 跳转到声明处(cmd加鼠标) opt + 空格 显示符号代码 (esc退出窗口 回车进入代码) cmd []光标之前/后的位置 opt + F7 find usage cmd backsp ...

  9. chrome浏览器经常无响应

    chrome浏览器(v68)安装一个fiddler证书导入后点击关闭,会出现无响应 有时候动不动会无响应,今天百度了一下,发现真正的"罪魁祸首"是搜狗输入法,升级一下就好了 万恶的 ...

  10. struts中操作request,session

    在Action类中操作request,session 方法一.利用ActionContext.getContext().get("request"); //返回的是Map集合 Ma ...