三个泛型参数:

  Param 任务执行器需要的数据类型

  Progress 后台计算中使用的进度单位数据类型

  Result 后台计算返回结果的数据类型有些参数是可以设置为不使用的,只要传递为Void型即可,比如AsyncTask

四个步骤:onPreExecute(),执行预处理,它运行于UI线程,可以为后台任务做一些准备工作,比如绘制一个进度条控件。doInBackground(Params…),后台进程执行的具体计算在这里实 现,doInBackground(Params…)是AsyncTask的关键,此方法必须重载。在这个方法内可以使用 publishProgress(Progress…)改变当前的进度值。onProgressUpdate(Progress…),运行于UI线程。如果在doInBackground(Params…)中 使用了publishProgress(Progress…),就会触发这个方法。在这里可以对进度条控件根据进度值做出具体的响应。onPostExecute(Result),运行于UI线程,可以对后台任务的结果做出处理,结果就是doInBackground(Params…)的返回值。此方法也要经常重载,如果Result为null表明后台任务没有完成(被取消或者出现异常)。

  这4个方法都不能手动调用。而且除了doInBackground(Params…)方法,其余3个方法都是被UI线程所调用的,所以要求:1) AsyncTask的实例必须在UI thread中创建;2) AsyncTask.execute方法必须在UI thread中调用;

Task只能被执行一次,多次调用时将会出现异常,而且是不能手动停止。

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView;

public class AsyncTaskTest extends Activity { 
    TextView tv; 
    final String TAG="AsyncTaskTest"; 
  
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        tv = (TextView) findViewById(R.id.label); 
        new MyTask().execute(6, 12, 7); 
  
    } 
  
    class MyTask extends AsyncTask<Integer, Integer, Integer> { 
  
        @Override 
        protected void onPreExecute() { 
            super.onPreExecute(); 
            Log.d(TAG, "onPreExecute()"); 
        } 
  
        @Override 
        protected Integer doInBackground(Integer... params) { 
            Log.d(TAG, "doInBackground()"); 
            int p = 0; 
            for (int index = 0; index < params.length; index++) { 
                int num = params[index]; 
                for (int j = 0; j < num; j++) { 
                    if (num - j <= 0) { 
                        break; 
                    } 
                    p++; 
                    publishProgress(p); 
                    try { 
                        Thread.sleep(500); 
                    } catch (InterruptedException e) { 
                        e.printStackTrace(); 
                    } 
                } 
            } 
            return p; 
        }
  
        @Override 
        protected void onProgressUpdate(Integer... progress) { 
            Log.d(TAG, "onProgressUpdate()"); 
            tv.append("\nProgress: " + progress[0]); 
        } 
  
        @Override 
        protected void onPostExecute(Integer result) { 
            Log.d(TAG, "onPostExecute()"); 
            tv.append("\nFinished. Result: " + result); 
        } 
  
        @Override 
        protected void onCancelled() { 
            super.onCancelled(); 
            Log.d(TAG, "onCancelled()");
        }
    }
}  

转载于:https://www.cnblogs.com/DswCnblog/archive/2012/11/12/2766871.html

Android AsyncTask简单用法相关推荐

  1. Android Scroller简单用法

    Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(conte ...

  2. Android TabLayout(选项卡布局)简单用法实例分析

    本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...

  3. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )

    文章目录 一.添加依赖 二.在 AndroidManifest.xml 中配置权限 三.权限申请最简单用法 四.推荐使用的用法 五.GitHub 地址 上一篇博客 [Android 应用开发]Goog ...

  4. 【Android】Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法

    Android适配器之ArrayAdapter.SimpleAdapter和BaseAdapter的简单用法与有用代码片段 ArrayAdapter.SimpleAdapter和BaseAdapter ...

  5. Android—— ListView 的简单用法及定制ListView界面

    一.ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤: 1)首先新建一个项目, 并让ADT 自动帮我们创建好活动. ...

  6. android中checkbox使用方法,Android开发中CheckBox的简单用法示例

    本文实例讲述了Android开发中CheckBox的简单用法.分享给大家供大家参考,具体如下: CheckBox是一种在界面开发中比较常见的控件,Android中UI开发也有CheckBox,简单的说 ...

  7. android surface编程,Android中SurfaceView用法简单实例

    本文实例讲述了Android中SurfaceView用法.分享给大家供大家参考,具体如下: 这里贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来 ...

  8. Android AsyncTask两种线程池分析和总结

    转自:http://bbs.51cto.com/thread-1114378-1-1.html Android AsyncTask两种线程池分析和总结 (一)    前言 在android Async ...

  9. AsyncTask的用法

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

最新文章

  1. 2019春季学期期末总结
  2. swift学习一:介绍,开发文档下载
  3. 基于TensorFlow,人声识别如何在端上实现?
  4. ogg 故障解决一则
  5. mysql rpm 安装多实例_MySQL多实例安装
  6. Node.js-Express框架
  7. 云空间-全面进入免费云时代-国内首家免费T级云空间!
  8. Type class-Typeclass-泛型基础上的二次抽象
  9. (1)-使用json所要用到的jar包下载
  10. python解析json传入变量_Python 使用 docopt 解析json参数文件过程讲解
  11. Python小白的数据库入门
  12. sql vb xml 换行_vb怎么写换行代码 vb文本框怎么换行输出
  13. 计算机三级数据库考试题型,计算机三级数据库技术考试习题及答案
  14. 简记_高频变压器基础知识(一)
  15. GEE开发之Landsat8_SR计算NDVI和数据分析
  16. java必记单词_70个学习JAVA必背的英语单词,了解下
  17. 在iOS9上不能分享至微信,提示没有安装微信客户端
  18. 教师资格综合素质知识要点记录
  19. [每日一氵] python创建简单 command-line interface (CLI) API
  20. 高考数学必考知识点数学高考常考考点

热门文章

  1. 逻辑回归和线性回归的区别_机器学习简介之基础理论- 线性回归、逻辑回归、神经网络...
  2. java多表查询实体接收_java - 如何创建Criteria Builder查询以连接具有一对一和多对一实体关系的三个表? - 堆栈内存溢出...
  3. java链接mysql输出查询_用java做网站,java连接数据库并查询输出到页面
  4. mysql like ilike_MySQLilike 子句
  5. 从书上截取一段TCP三次握手和四次挥手
  6. The following profiles are active: dev
  7. Memcache配置
  8. 笔记-项目采购管理-索赔的处理
  9. Windows下使用Java API操作HDFS的常用方法
  10. el-table中怎样设置标题栏颜色以及每一行颜色交替不同的效果