热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidAsyncTask异步任务(更新进度条例子)

文章目录AsyncTask的定义作用优点常用方法和方法的执行顺序进度条例子布局MyAsyncTack类MainActivity类效果AsyncTask的定义1、一个Android

文章目录

  • AsyncTask的定义
  • 作用
  • 优点
  • 常用方法和方法的执行顺序
  • 进度条例子
    • 布局
    • MyAsyncTack类
    • MainActivity类
    • 效果


AsyncTask的定义

1、一个Android 已封装好的轻量级异步类
2、 属于抽象类,即使用时需 实现子类

作用

1、实现多线程
在工作线程中执行任务,如 耗时任务
2、异步通信、消息传递
实现工作线程 & 主线程(UI线程)之间的通信,即:将工作线程的执行结果传递给主线程,从而在主线程中执行相关的UI操作

优点
  • 方便实现异步通信
    不需使用 “任务线程(如继承Thread类) + Handler”的复杂组合
  • 节省资源(轻量级)
    采用线程池的缓存线程 + 复用线程,避免了频繁创建 & 销毁线程所带来的系统资源开销

常用方法和方法的执行顺序

在这里插入图片描述
在这里插入图片描述

进度条例子

布局

<ProgressBarandroid:layout_marginTop&#61;"30dp"style&#61;"?android:attr/progressBarStyleHorizontal"android:layout_width&#61;"match_parent"android:layout_height&#61;"wrap_content"android:id&#61;"&#64;&#43;id/progressBar"/><TextViewandroid:id&#61;"&#64;&#43;id/tv_num"android:layout_width&#61;"wrap_content"android:layout_height&#61;"wrap_content"android:text&#61;" 0 / 100"/><Buttonandroid:layout_marginLeft&#61;"100dp"android:text&#61;"start"android:layout_width&#61;"wrap_content"android:layout_height&#61;"wrap_content" android:id&#61;"&#64;&#43;id/b9"/>

MyAsyncTack类

package com.test;import android.os.AsyncTask;
import android.os.Handler;
import android.widget.ProgressBar;
import android.widget.TextView;/*** AsyncTack泛型的三个参数* 1. Params&#xff1a;开始异步任务执行时传入的参数类型&#xff0c;对应excute&#xff08;&#xff09;中传递的参数* 2. Progress&#xff1a;异步任务执行过程中&#xff0c;返回下载进度值的类型* 3. Result&#xff1a;异步任务执行完成后&#xff0c;返回的结果类型&#xff0c;与doInBackground()的返回值类型保持一致*注&#xff1a;* 1. 使用时并不是所有类型都被使用* 2. 若无被使用&#xff0c;可用java.lang.Void类型代替* 3. 若有不同业务&#xff0c;需额外再写1个AsyncTask的子类*/
public class MyAsyncTask extends AsyncTask<Integer,Integer,String> {private TextView textView;private ProgressBar progressBar;public MyAsyncTask(TextView textView,ProgressBar progressBar) {super();this.textView &#61; textView;this.progressBar &#61; progressBar;}//最先执行的方法&#64;Overrideprotected void onPreExecute() {super.onPreExecute();}&#64;Overrideprotected void onPostExecute(String s) {super.onPostExecute(s);textView.setText("加载完成!");}/*** 在doInBackground方法中每次调用publishProgress方法都会触发此方法* 此方法运行在ui线程中&#xff0c;可操作ui控件* &#64;param values*/&#64;Overrideprotected void onProgressUpdate(final Integer... values) {super.onProgressUpdate(values);progressBar.setProgress(values[0]);//setText的参数是string&#xff0c;不然报错textView.setText("loading..."&#43;values[0]&#43;"%");}//后台执行的方法&#64;Overrideprotected String doInBackground(Integer... integers) {int i&#61;0;for (i &#61; 10; i <&#61;100 ; i&#43;&#61;10) {try{Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}publishProgress(i);}return i&#43;integers[0].intValue()&#43;"";}
}

MainActivity类

public class MainActivity extends AppCompatActivity implements View.OnClickListener{private ProgressBar progressBar;private TextView tv;private Button b9;&#64;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);b9 &#61; findViewById(R.id.b9);progressBar &#61; findViewById(R.id.progressBar);tv &#61; findViewById(R.id.tv_num);b9.setOnClickListener(new View.OnClickListener() {&#64;Overridepublic void onClick(View view) {MyAsyncTask myAsyncTask &#61; new MyAsyncTask(tv,progressBar);myAsyncTask.execute(100);}});}}

效果

在这里插入图片描述

本文参考文章地址和图片出处


推荐阅读
author-avatar
晨风流云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有