1.什么是AsyncTask
AsyncTask是安卓提供的轻量级(实现代码少)的异步类。
为了减低异步通信的开发难度,提供AsyncTask。
AsyncTask直接继承与object类,位于androi.os包中。
使用AsyncTask可以忽略looper、MessageQueue、Handler等复杂对象,更省时。
2.如何使用AsyncTask
新建内部类继承AsyncTask。
定义AsyncTask三种泛型参数,重写doInBackground抽象方法,重写onPostExecute、onProgressUpdate方法。
在需要启动的地方调用execute方法。
3.使用AsyncTask做倒计时
首先将按键、布局设定好;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.ll.handler.TaskActivity">
<EditText
    android:id="@+id/ed"android:layout_width="match_parent"android:layout_height="50dp" /><TextView
        android:gravity="center"android:text="倒计时"android:textSize="30sp"android:id="@+id/tv"android:layout_width="match_parent"android:layout_height="200dp" /><Button
        android:text="开始计时"android:id="@+id/btn"android:layout_width="match_parent"android:layout_height="50dp" />
</LinearLayout>

然后绑定Id

private void BIndId() {editText=findViewById(R.id.ed);textView=findViewById(R.id.tv);button=findViewById(R.id.btn);}

接着创建内部类继承syncTask,重写doInBackground抽象方法,重写onPostExecute、onProgressUpdate方法。

class  myabc extends AsyncTask<Integer,Integer,String> {@Overrideprotected String doInBackground(Integer... integers) {for (int i=0;i<integers[0];i++){try {Thread.sleep(1000);publishProgress(i);//调用onProgressUpdate方法} catch (InterruptedException e) {e.printStackTrace();}}return "计时结束";}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);textView.setText("计时:"+values[0]);}@Override//耗时操作完成时,请调用此方法(主线程)protected void onPostExecute(String s) {super.onPostExecute(s);textView.setText(s);}}
}

最后 在需要启动的地方调用execute方法。

  button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {int time=Integer.parseInt(editText.getText().toString());new myabc().execute(time);}});

4.使用AsyncTask做进度条
其实进度条与做倒计时差不多。
首先将按键、布局设定好;

?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.ll.handler.Async">
<ProgressBarandroid:id="@+id/pbar"style="@style/Widget.AppCompat.ProgressBar.Horizontal"android:layout_width="match_parent"android:layout_height="300dp" /><Buttonandroid:id="@+id/kaishibtn"android:text="开始下载"android:layout_width="match_parent"android:layout_height="50dp" /><Buttonandroid:id="@+id/quxiao"android:text="取消下载"android:layout_width="match_parent"android:layout_height="50dp" />
</LinearLayout>
rivate void BindId() {zbtv=findViewById(R.id.zbxztv);ksbtn=findViewById(R.id.zsxabtn);}

然后绑定Id

private void BindId() {bar=findViewById(R.id.pbar);btn=findViewById(R.id.kaishibtn);btn.setOnClickListener(this);bar.setMax(10);}

接着创建内部类继承syncTask,重写doInBackground抽象方法,重写onPostExecute、onProgressUpdate方法。

lass  mycvb extends AsyncTask<Integer,Integer,Integer>{@Overrideprotected Integer doInBackground(Integer... integers) {for(int i=1;i<=10;i++){try {Thread.sleep(1000);publishProgress(i);} catch (InterruptedException e) {e.printStackTrace();}}return 1;}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);bar.setProgress(values[0]);}@Overrideprotected void onPostExecute(Integer s) {super.onPostExecute(s);btn.setText("下载完成");}}
}

最后 在需要启动的地方调用execute方法。

public void onClick(View view) {switch (view.getId()){case R.id.btn:btn.setEnabled(false);btn.setText("正在下载");new mycvb().execute();break;}}

5.Execute()和executeOnExecutor有何区别
Execute方法:
启动异步消息,AsyncTask中的方法会被系统统一调用
Execute方法必须在UI线程中调用,使用Execute启动多个任务时,会按照现后顺序逐一进行。
executeOnExecutor:
启动异步消息,AsyncTask中的方法会被系统统一调用
executeOnExecutor方法必须在UI线程中调用,使用executeOnExecutor可以同时启动多个任务时,最多5个一起执行。
6.更喜欢AsyncTask还是Handler
其实吧,我觉得谈不上那个更喜欢,但是只有一点可以肯定时那个方便用哪个。

安卓AsyncTask相关推荐

  1. 安卓TV开发(八) 移动智能终端多媒体爬虫技术 获取加载网页视频源

    转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40049137,作者:skay 从上一篇学习中,学习了多媒体技术中的怎么去用josu ...

  2. 移动智能终端多媒体爬虫技术 获取加载网页视频源

    转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40049137,作者:skay 从上一篇学习中,学习了多媒体技术中的怎么去用josu ...

  3. 安卓开发30:AsyncTask的用法

    http://blog.csdn.net/initphp/article/details/10392093 安卓开发笔记系列(43)  在开发Android应用时必须遵守单线程模型的原则: Andro ...

  4. 深入理解安卓异步任务AsyncTask

    上一节讲了asynctask的官方文档,这一节深入讲解如何深入使用AsyncTask. asynctask本质上也是线程启动,只是它封装了一些内容,可以运行在后台,同时可以和UI线程交互. async ...

  5. 安卓多线程——AsyncTask

    在采集视频的同时需要对视频进行实时处理,因此要使用到多线程. AsyncTask是android提供的一个处理异步任务的框架,相当于Handler+Thread.相比而言,AsyncTask的优点是封 ...

  6. 安卓移动开发——用AsyncTask来实现计时器和进度条

    运行前 运行后 布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  7. 关于安卓版的eclipse连接数据库并誓言增删改查

        在安卓环境下连接数据库下面是主要代码极其作用: 1.编写 The Class类把课程表courses.db当做一个实体类,hashcode和equals这两个类是为了判断输入的查询内容和Exc ...

  8. 安卓AsyncTack详解

    我们知道安卓中的UI线程不是线程安全的,即不能在UI线程中进行耗时操作,所以我们通常的做法是开启一个子线程来进行耗时操作,然后将处理后的结果运用Handler机制传递给UI线程,在UI线程中根据处理后 ...

  9. AsyncTask 实现异步处理任务

    本文来自:安卓航班网 在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.在单线程模型中始终要记住两条法则: 1. 不要阻塞 ...

最新文章

  1. 如何规划创建一个家庭实验室
  2. keras 修仙笔记一
  3. 线性代数学习笔记(几何版)
  4. 新电子书:解决生产中Java应用程序错误的完整指南
  5. iOS开发之抽屉效果
  6. 面试官解答:BAT等大厂最需要怎样的程序员
  7. Java中this、super的用法(2)
  8. axure原型设计:手机版可视化图表
  9. 计算机硬件的五大组成部分
  10. [CF1031E]Triple Flips
  11. Element UI 中国省市区级联数据
  12. 苹果app旧版本软件下载
  13. 如何拍背景虚化的照片_如何拍摄出突出主体(背景虚化)的照片
  14. 微信小程序——猜数字游戏小案例
  15. Vue - 实现图片裁剪功能,并上传到服务器(内置第三方最优秀的裁剪图片组件,上传到服务器功能)干净整洁无 BUG 的示例源码与超详细的注释,兼容任意浏览器
  16. 女程序员,作程序员还是作女人?
  17. thinkphp6,压缩图片内存,并上传到oss,质量影响不大。
  18. 稀疏表示 河流多元信息处理 matlab
  19. PyJWT 第三方包
  20. format()用法

热门文章

  1. 版本控制工具VSS使用介绍
  2. 记录一次redis莫名其妙丢失token的解决方案
  3. PTA 1054 求平均值 (20 分)
  4. 如何成为有效学习的高手(笔记)
  5. 国内android应用商城中程序隐私泄露分析,基于数据生命周期的Android应用程序隐私泄露分析技术研究...
  6. LoRa笔记03 LoRa sx1276 sx1278空中唤醒研究
  7. MVN打包报错:在类路径或引导类路径中找不到程序包 java.lang
  8. naticat连接mysql报错_「2509」Navicat连接mysql报错2509 - seo实验室
  9. ai切换rgb模式_AI基础教程:如何更改CMYK模式?更改的两个方法
  10. Mybatis联表查询:多对多(注解实现)