android开发 AsyncTask的使用



AsyncTask 资料上写是android提供的轻量级的异步类

可以直接继承AsyncTask 在类中实现异步操作 提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新)

最后反馈执行的结果给UI主线程

个人觉得 这是在一个线程的基础上 增加了对UI的控制 这样就不是一个简单的线程派生类

这就丰富了对UI的控制

而UI的控制一般都是在主线程上 ID是1 至于AsyncTask 内到底哪些接口是在主线程上

哪些是异步的线程上 而那些接口的调用顺序是怎么样的 下面就来看看一个例子

首先写一个AsyncTask派生类

吧哪些执行操作的接口都重写一下 并打印输出

public class PlayAsyncTask extends AsyncTask<Void, Void, Void> {

	@Override
	protected Void doInBackground(Void... arg0) {
		System.out.println("doInBackground Thread ID "+Thread.currentThread().getId()); 

		//该函数会产生一个onProgressUpdate回调
		publishProgress();
		return null;
	}

	@Override
	protected void onPostExecute(Void result) {
		// TODO Auto-generated method stub
		super.onPostExecute(result);

		System.out.println("onPostExecute Thread ID "+Thread.currentThread().getId());
	}

	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
		super.onPreExecute();

		System.out.println("onPreExecute Thread ID "+Thread.currentThread().getId());
	}

	@Override
	protected void onProgressUpdate(Void... values) {
		// TODO Auto-generated method stub
		super.onProgressUpdate(values);

		System.out.println("onProgressUpdate Thread ID "+Thread.currentThread().getId());
	}

}

在Activity上生成一个对象 这样就在主线程上执行了一个异步操作

System.out.println(" AsyncTask start");
         PlayAsyncTask playAsyncTask = new PlayAsyncTask();
         playAsyncTask.execute();

看看输出的结果

可以看到的是 只有doInBackground会在异步线程上执行 其余的都是在主线程上

也就是说 除doInBackground外 其他的回调函数都能对UI执行操作

时间: 2024-10-26 12:19:48

android开发 AsyncTask的使用的相关文章

Android开发——AsyncTask详解

android提供AsynvTask,目的是为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的. Android为了降低开发难度,提供了AsyncTask.AsyncTask 是一个封装过的后台任务类,就是异步任务. AsyncTask直接继承于Object类,位置为android.os.AsyncTask.要使用AsyncTask工作我们要提供三个泛型参数,并重载几个方法(至少重载一个). AsyncTask定义了三种泛型类型 Params,Progress

Android开发:AsyncTask源代码完全解析

从事Java开发以来,接触过很多的开源代码,自己能够明白代码但是想要表达出来却有点困难,从今天开始,逐渐开始对一些开源代码进行解析并记录成blog分享出来,希望以此提升自己的表达能力,如果文章中有什么出错之处,欢迎读者在评论中指出方便我及时的修正,以免误导其他读者,如果你有什么更好的建议也欢迎在下方留下你的评论,本人不胜荣幸.转载此文的朋友请带上原文的链接:http://blog.csdn.net/d_clock/article/details/43805779好,扯淡的话到此为止,接下来进入正

Android开发:实时处理摄像头预览帧视频------浅析PreviewCallback,onPreviewFrame,AsyncTask的综合应用(转)

原文地址:http://blog.csdn.net/yanzi1225627/article/details/8605061# 很多时候,android摄像头模块不仅预览,拍照这么简单,而是需要在预览视频的时候,能够做出一些检测,比如最常见的人脸检测.在未按下拍照按钮前,就检测出人脸然后矩形框标示出来,再按拍照.那么如何获得预览帧视频么? 只需要在Activity里继承PreviewCallback这个接口就行了.示例如下: public class RectPhoto extends Acti

Android开发中立即停止AsyncTask和Thread的一些办法

程序开发中经常会有立即停止线程运行的需要,而通过api是没有办法实现这个目的的,因此对于这个情况,我们需要采取一些“特殊”的方式来实现: 1,判断标志位的办法: 我们要知道在java的线程中,没有办法停止一个正在运行中的线程.在Android的AsyncTask中也是一样的.如果必须要停止一个线程,我们可以采用这个线程中设置一个标志位,然后在线程run方法或AsyncTask的doInBackground方法中的关键步骤判断这个标志位以决定是否继续执行.然后在需要终止此线程的地方改变这个标志位以

Android开发之图片处理专题(二):利用AsyncTask和回调接口实现图片的异步加载和压缩

在上一篇专题Android开发之图片处理专题(一):利用软引用构建图片高速缓存中我们讲述了如何利用软引用技术构建高速缓存.那么想要用到图片,首先得有图片的来源.一般而言,一个应用的图片资源都是从服务器处获得的.今天,我们利用Android开发之网络请求通信专题(二):基于HttpClient的文件上传下载里面封装好的httpUtils来实现图片的下载,然后加载到本地配合软引用缓存使用,以一个listView为例子来说明. 一.准备工作 我们需要准备以下几个类(图片对象和软引用缓存类请参考上一篇专

Android开发之异步详解(二)之AsyncTask

请尊重他人的劳动成果,转载请注明出处:Android开发之异步详解(二)之AsyncTask http://blog.csdn.net/fengyuzhengfan/article/details/40212745 我曾在<Android开发之异步详解(一)之Thread+Handler>一文中介绍过通过Thread+Handler实现异步操作.感兴趣的朋友可以看一下. 虽然Thread+Handler可以实现更新主线程的UI并实现异步,但Thread+Handler模式需要为每一个任务创建一

Android开发--取消AsyncTask

在Android应用开发过程中,为了防止UI线程堵塞,耗时的工作都应该另起一个后台线程来完成,其中AsyncTask就是其中的一种方式.最近在案子中需要"停止/取消"某个AsyncTask,在网上查了些资料,这里做个笔记. 查看AsyncTask.java文件,其中有个cancel()函数,可以通过调用cancel(true)来停止正在运行的AsyncTask. /** * <p>Attempts to cancel execution of this task. This

Android开发学习之路--异步消息Handler,Message,Looper和AsyncTask之初体验

在简易音乐播放器中,用了Handler,也没有过多地去研究学习,这里再学习下android下的异步消息处理机制.这里用了Handler主要是在线程中不能更新UI,而需要通过Handler才可以.关于异步消息处理有几个概念. 1.Message:消息,线程间通讯的数据单元.例如后台要下载歌曲然后下载完成要更新ui,则可以发送一条包含更新信息的Message给UI线程. 2.MessageQueue:消息队列,用来存放所有通过Handler发布的消息,因为是队列,所以是先进先出的. 3.Handle

Android开发之使用AsyncTask实现实时翻译

最近在做自己的安卓软件,于是乎就自己做了个翻译功能,主要方式是使用AsyncTask实现异步处理,翻译调用的互联网接口是有道提供的API. 方法很简单,通过HttpGET和HttpResponse获得String,再将json数据解析即可. 在AsynTask实现类中,输入是String,在doInBackground方法里主要实现目标String的获取.而在onPostExecute方法里主要实现获取后对结果result的处理与解析. 其他过程就没啥好说的了:具体代码如下: package c