`
helpbs
  • 浏览: 1162017 次
文章分类
社区版块
存档分类
最新评论

[Android]异步任务AsyncTask使用解析

 
阅读更多

AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用。

AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法。注意继承时需要设定三个泛型Params,Progress和Result的类型,如AsyncTask<Void,Inetger,Void>:

  • Params是指调用execute()方法时传入的参数类型和doInBackgound()的参数类型
  • Progress是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型
  • Result是指doInBackground()的返回值类型
上面的说明涉及到几个方法:
  • doInBackgound() 这个方法是继承AsyncTask必须要实现的,运行于后台,耗时的操作可以在这里做
  • publishProgress() 更新进度,给onProgressUpdate()传递进度参数
  • onProgressUpdate() 在publishProgress()调用完被调用,更新进度
好了,看下实际的例子,了解一下怎么使用吧:
  1. publicclassMyActivityextendsActivity
  2. {
  3. privateButtonbtn;
  4. privateTextViewtv;
  5. @Override
  6. publicvoidonCreate(BundlesavedInstanceState)
  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. publicvoidonClick(Viewv){
  14. update();
  15. }
  16. });
  17. }
  18. privatevoidupdate(){
  19. UpdateTextTaskupdateTextTask=newUpdateTextTask(this);
  20. updateTextTask.execute();
  21. }
  22. classUpdateTextTaskextendsAsyncTask<Void,Integer,Integer>{
  23. privateContextcontext;
  24. UpdateTextTask(Contextcontext){
  25. this.context=context;
  26. }
  27. /**
  28. *运行在UI线程中,在调用doInBackground()之前执行
  29. */
  30. @Override
  31. protectedvoidonPreExecute(){
  32. Toast.makeText(context,"开始执行",Toast.LENGTH_SHORT).show();
  33. }
  34. /**
  35. *后台运行的方法,可以运行非UI线程,可以执行耗时的方法
  36. */
  37. @Override
  38. protectedIntegerdoInBackground(Void...params){
  39. inti=0;
  40. while(i<10){
  41. i++;
  42. publishProgress(i);
  43. try{
  44. Thread.sleep(1000);
  45. }catch(InterruptedExceptione){
  46. }
  47. }
  48. returnnull;
  49. }
  50. /**
  51. *运行在ui线程中,在doInBackground()执行完毕后执行
  52. */
  53. @Override
  54. protectedvoidonPostExecute(Integerinteger){
  55. Toast.makeText(context,"执行完毕",Toast.LENGTH_SHORT).show();
  56. }
  57. /**
  58. *在publishProgress()被调用以后执行,publishProgress()用于更新进度
  59. */
  60. @Override
  61. protectedvoidonProgressUpdate(Integer...values){
  62. tv.setText(""+values[0]);
  63. }
  64. }
  65. }
分享到:
评论

相关推荐

    Android最全最简单的异步任务AsyncTask使用解析

    Android最全最简单的异步任务AsyncTask使用解析.一步到位彻底理解异步任务。

    Android代码-Android 一些重要知识点解析整理

    Android中的异步任务机制 Android中AsyncTak的使用与源码分析 Android AsyncTask 完全解析,带你从源码的角度彻底理解 Android 异步消息处理机制完全解析,带你从源码角度彻底理解 Android 异步消息处理机制...

    Android AsyncTask使用以及源码解析

    综述  在Android中,我们需要进行一些耗时的操作,会将这个操作放在子线程中进行。在子线程操作完成以后我们可以通过Handler进行发送消息,通知UI进行一些更新...它是一个轻量级的异步任务类,它的后台任务在线程池

    json解析+异步加载+listView

    包含通过json解析网络数据,添加到listView中显示出来,并有多线程和AsyncTask异步加载方式。

    Android带进度条的下载图片示例(AsyncTask异步任务)

    本文主要介绍Android带进度条的下载图片示例(AsyncTask异步任务)的方法解析。具有很好的参考价值。下面跟着小编一起来看下吧

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

    不过为了更加方便我们在子线程中更新UI元素,Android从1.5版本就引入了一个AsyncTask类,使用它就可以非常灵活方便地从子线程切换到UI线程,我们本篇文章的主角也就正是它了。 AsyncTask很早就出现在Android的API里...

    Android使用AsyncTask加载图片的操作流程

    如果异步任务完成前,用户离开Activity或者设置发生改变,ImageView也可能不存在。 class BitmapWorkerTask extends AsyncTask&lt;Integer&gt; { private final WeakReference&lt;ImageView&gt; imageViewReference; private ...

    Android AsyncTask 完美解析 看不懂源码你就输了

    android.os.AsyncTask,一个执行异步操作的类,我们可以使用它来处理后台任务,并且在UI线程中处理结果,而无需关心线程的问题。 AsyncTask 内部是使用 {@link Thread}和{@link Handler}来实现的。理想情况下,应将...

    Android网络音乐播放器 源码下载

    异步任务AsyncTask执行耗时任务-音乐的收藏(使用到数据库)操作及音乐的搜索等需要访问网络的操作; 自定义view实现圆形专辑图片,滚动歌词,支持下拉刷新的音乐列表; Json解析网络响应,正则表达式解析歌词; ...

    使用ListView和异步加载来下载网络上的资源,然后用fastjson解析资源

    使用ListView和异步加载(AsyncTask)来下载网络上的资源,然后用fastjson解析资源,并显示在ListView中。

    android异步消息机制 从源码层面解析(2)

    AsyncTask是一个轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和结果传递给主线程并在主线程中更新UI。 AsyncTask这个类的声明如下 public abstract class AsyncTask&lt;Params&gt; 它提供了...

    老罗android视频开发源码和ppt经典

    15.1 AsyncTask异步任务介绍一 15.2 AsyTask异步任务介绍二 15.3 Handler和Message(一) 15.4 Handler和Message(二) 15.5 Handler和Message(三) 15.6 Handler和Looper 15.7 Handler综合练习(图文混排)

    安卓异步加载网络资源(多线程&AsynvTask)

    本项目是根据慕课网《android必学-异步加载》视频教学所开发的一套异步加载网络资源的小demo.其中分别用到了多线程、AsyncTask实现异步加载的功能。 里面还包括了: json解析、网络请求、LruCache缓存、滚动优化等...

    Android HttpClient与Json解析

    该Demo主要介绍使用HttpClient获取网络数据,然后经过JSON后显示出来。另外本文章用到了常用的异步加载技术,AsyncTask类。

    老罗android开发视频教程全集百度网盘下载

    LoaderManager异步加载、多线程(AsyncTask与Handler)、 百度地图等十五个模块,一共102集。 本网盘分享章节编号是按照视频更新的先后顺序编号的,具体学习可参考如下章节顺序: 【第一版第一章】老罗Android...

    Android HTTP网络请求的异步实现

    右边的异步任务,HttpClient创建,参数解析,错误处理全部交给网络处理模块来完成。由此来看,这个网络模块其实是重复性很高的开发工作,为了避免重复造轮子,下面就给大家介绍下我们工作中实现的网络操作模块及相应...

    android MP3

    这是一个基于android平台开发的一个MP3播放器,所使用的技术有AsyncTask 异步搜索sd卡下的mp3文件,ViewPager listview 做ui显示,启动服务播放MP3,服务器搜索MP3,多线程下载MP3,现在播放,上一首,下一首,暂停/...

    Android新闻网站客户端源代码

    编写方法调用接口获取新闻信息,解析新闻信息,把解析后的新闻显示到View上。实现获取不同分类新闻列表功能...使用AsyncTask异步更新UI界面。异步加载新闻内容。 数据库采用mysql。 如果有不懂得地方,可以留言,必回!

    android知识大总结【邯院】

    3. AsyncTask异步处理任务 15 4. 音频播放 20 8. 视频播放 26 9. 使用摄像头拍照 32 10. 视频录制 39 11. 国际化 43 12. 样式和主题 46 13. 编码实现软件界面 49 14. 标签页(选项卡) 51 15. 用HTML实现网页界面 57...

Global site tag (gtag.js) - Google Analytics