AsyncTask使用解析

AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用。
AsyncTask是一个抽象类,使用时需要继承这个类,然后调用execute()方法开始执行异步任务。

Async有三个泛型参数Async<params,inetger,result>:
  • Params是指调用execute()方法时传入的参数类型和doInBackground()的参数类型
  • Progress是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型
  • Result是指doInBackground()的返回值类型

上面的说明涉及到几个方法:

  • doInBackgound() 这个方法是继承AsyncTask必须要实现的,
    运行于后台,耗时的操作可以在这里做
  • publishProgress() 更新进度,给onProgressUpdate()传递进度参数
  • onProgressUpdate() 在publishProgress()调用完被调用,更新进度

实际的例子:

  1. publicclassMyActivityextendsActivity
  2. {
  3. privateButton btn;
  4. privateTextView tv;
  5. @Override
  6. publicvoid onCreate(Bundle savedInstanceState)
  7. {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. btn =(Button) findViewById(R.id.start_btn);
  11. tv =(TextView) findViewById(R.id.content);
  12. btn.setOnClickListener(newButton.OnClickListener(){
  13. publicvoid onClick(View v){
  14. update();
  15. }
  16. });
  17. }
  18. privatevoid update(){
  19. UpdateTextTask updateTextTask =newUpdateTextTask(this);
  20. updateTextTask.execute();
  21. }
  22. classUpdateTextTaskextendsAsyncTask<Void,Integer,Integer>{
  23. privateContext context;
  24. UpdateTextTask(Context context){
  25. this.context = context;
  26. }
  27. /**
  28. * 运行在UI线程中,在调用doInBackground()之前执行
  29. */
  30. @Override
  31. protectedvoid onPreExecute(){
  32. Toast.makeText(context,"开始执行",Toast.LENGTH_SHORT).show();
  33. }
  34. /**
  35. * 后台运行的方法,可以运行非UI线程,可以执行耗时的方法
  36. */
  37. @Override
  38. protectedInteger doInBackground(Void... params){
  39. int i=0;
  40. while(i<10){
  41. i++;
  42. publishProgress(i);
  43. try{
  44. Thread.sleep(1000);
  45. }catch(InterruptedException e){
  46. }
  47. }
  48. returnnull;
  49. }
  50. /**
  51. * 运行在ui线程中,在doInBackground()执行完毕后执行
  52. */
  53. @Override
  54. protectedvoid onPostExecute(Integer integer){
  55. Toast.makeText(context,"执行完毕",Toast.LENGTH_SHORT).show();
  56. }
  57. /**
  58. * 在publishProgress()被调用以后执行,publishProgress()用于更新进度
  59. */
  60. @Override
  61. protectedvoid onProgressUpdate(Integer... values){
  62. tv.setText(""+values[0]);
  63. }
  64. }
  65. }

来自为知笔记(Wiz)

时间: 2024-08-23 10:17:28

AsyncTask使用解析的相关文章

异步任务AsyncTask使用解析

在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制.关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下. 为了简化操作,Android1.5提供了工具类android.os.AsyncTask,它使创建异步任

[学习总结]7、Android AsyncTask完全解析,带你从源码的角度彻底理解

我们都知道,Android UI是线程不安全的,如果想要在子线程里进行UI操作,就需要借助Android的异步消息处理机制.之前我也写过了一篇文章从源码层面分析了Android的异步消息处理机制,感兴趣的朋友可以参考 Android Handler.Message完全解析,带你从源码的角度彻底理解 . 不过为了更加方便我们在子线程中更新UI元素,Android从1.5版本就引入了一个AsyncTask类,使用它就可以非常灵活方便地从子线程切换到UI线程,我们本篇文章的主角也就正是它了. Asyn

Android AsyncTask 详细解析

结构 继承关系 public abstract class AsyncTask extends Object java.lang.Object android.os.AsyncTask<Params, Progress, Result> 类概述 AsyncTask能够适当地.简单地用于 UI线程. 这个类不需要操作线程(Thread)就可以完成后台操作将结果返回UI. 异步任务的定义是一个在后台线程上运行,其结果是在 UI线程上发布的计算. 异步任务被定义成三种泛型类型: Params,Pro

Android AsyncTask完全解析,带你从源码的角度彻底理解

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11711405 我们都知道,Android UI是线程不安全的,如果想要在子线程里进行UI操作,就需要借助Android的异步消息处理机制.之前我也写过了一篇文章从源码层面分析了Android的异步消息处理机制,感兴趣的朋友可以参考 Android Handler.Message完全解析,带你从源码的角度彻底理解 . 不过为了更加方便我们在子线程中更新UI元素,Android从1.

Android开发之异步消息处理机制AsyncTask

转自:Android AsyncTask完全解析,带你从源码的角度彻底理解 另外一篇比较详细的博文:http://blog.csdn.net/liuhe688/article/details/6532519 AsyncTask的基本用法 首先来看一下AsyncTask的基本用法,由于AsyncTask是一个抽象类,所以如果我们想使用它,就必须要创建一个子类去继承它.在继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下: 1. Params 在执行AsyncTask时需要传

ANDROID学习之路 转

版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!! 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在知乎上记录一路走来的历程,很励志,希望能给那些正在或准备走编程行业的人一些正能量,内容有点长,感兴趣的可以当做励志小说阅读吧. 收到一些朋友的微博私信,说能不能给Android新手们一些指导,我只能说指导谈不上,毕竟我也很多东西正在学习中,与此同时一大学同学准备转行Android,可以说是从头开始,

Android学习之路

Android基础 整理下个人认为新手们必须要掌握的知识点,顺便也会附带相应觉得不错的讲解博客地址. 两分钟彻底让你明白Android Activity生命周期(图文)! Activity实际开发中使用频率最高,这个必须要理解 Android四大基本组件介绍与生命周期 Android中的四大组件必须得知道,也是面试常问到的 ListView的基本使用与优化 ListView是所有控件中最常使用且对新手来说比较复杂的用法,各种Adapter的使用以及ListView的优化都是必须掌握的 Andro

8.1-8.31推荐文章汇总

8.1-8.31推荐文章汇总 [移动开发] Cocos2d-x Lua 读取Csv文件.更方便的使用数据        笨木头 Android应用怎样支持屏幕多尺寸多分辨率问题        xyz_lmn CSDN Androidclient开发(二):具体解释怎样基于Java用Jsoup爬虫HTML数据        yanzi1225627 Android开发之WebView具体解释        CrazyCodeBoy ANDROID自己定义视图--onLayout源代码 流程 思路具

Android自学绝佳资料

本文转自stormzhang老师的博客:http://stormzhang.com/android/2014/07/07/learn-android-from-rookie 首先感谢stromzhang老师的无私分享,让迷惘的android新手找到前进的方向,如获至宝,相见恨晚,因此,保存收藏以便随时学习(本文里的链接貌似都打不开……),同时希望更多android新手能够早日看到这篇好文章!再次感谢stormzhang老师!关注张老师的微博或微信公共号,可以第一时间获得很多很多干货哦. 书籍 书