Android中用AsyncTask简单实现多线程 博客分类: Android 多线程AndroidJ#OSUI

      一般情况下在android中使用多线程的时候,我们都是在线程运行的时候使用Handler来给主线程传递消息,这样用起来虽然没什么不好,但是总感觉有点乱。其实Android已经提供了一个标准的实现多线程的模型,那就是AsyncTask类。       这个类用起来很简单,继承他之后,override几个方法,然后就可以在线程执行过程中,不断的将结果通知给ui线程。       下面简单讲一下用法,看代码:

package cn.infogiga.starter;

import android.os.AsyncTask;
import android.util.Log;

/**
 * @author chroya
 *
 */
public class MyThreads extends AsyncTask<Integer, Integer, Integer>{

	@Override
	protected Integer doInBackground(Integer... params) {		
		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);				
			}			
		}
		//返回总数
		return p;
	}

	@Override
	protected void onProgressUpdate(Integer... progress) {
		Log.d("onProgressUpdate", "progress:"+ progress[0]);
    }

	@Override
	protected void onPostExecute(Integer result) {
        Log.d("onPostExecute", "result:"+ result);
    }	
}

      MyThreads继承了AsyncTask,他有三个泛型参数,第一个是任务执行所需要的参数类型,第二个是任务的进度表示类型,第三个是进度计算的结果类型。

      我override了三个方法:

doInBackground:就是任务执行的主方法,它会被作为一个线程运行。

onProgressUpdate:进度更新的时候调用,进度什么时候更新呢?就是调用了publishProgress方法之后就更新。

onPostExecute:在doInBackground执行并返回之后调用,因为他需要doInBackground的返回值做参数。         怎么使用它呢?

new MyThreads().execute(10, 20, 30);

        没错,就这一句。

这一句传递了三个参数进去,传递给了 doInBackground,然后线程开始运行,将三个数开始逐一计数,虽然计数不用这么麻烦,但是为了弄明白AsyncTask的运行机制,复杂点反而好。

        结果打印出 onProgressUpdate的 1到60,最后打印出了 onPostExecute的result:60.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏瞎说开发那些事

[并发编程系列]Java中的原子操作类

224110
来自专栏程序员的知识天地

Python实现堆栈

堆栈是一个后进先出的数据结构,其工作方式就像一堆汽车排队进去一个死胡同里面,最先进去的一定是最后出来。

18020
来自专栏大内老A

采用一个自创的"验证框架"实现对数据实体的验证[设计篇]

没有想到自己头脑发热写了一个简陋版本的所谓“验证框架”能够得到众多网友的推荐。个人觉得这个验证框架有两个主要的特点是:提供CompositeValidator使...

21080
来自专栏尾尾部落

[剑指offer] 用两个栈实现队列

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

10110
来自专栏架构技术

AOP缓存实现

18040
来自专栏技术专栏

慕课网高并发实战(四)- 线程安全性

当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要额外的同步或协同,这个类都能表现出正确行为,那么就称这个...

17820
来自专栏专注 Java 基础分享

CAS 无锁式同步机制

计算机系统中,CPU 和内存之间是通过总线进行通信的,当某个线程占有 CPU 执行指令的时候,会尽可能的将一些需要从内存中访问的变量缓存在自己的高速缓存区中,而...

13920
来自专栏菩提树下的杨过

利用sharding-jdbc分库分表

sharding-jdbc是当当开源的一款分库分表的数据访问层框架,能对mysql很方便的分库、分表,基本不用修改原有代码,只要配置一下即可,完整的配置参考以下...

56870
来自专栏向治洪

访问者模式

概念 访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 访问者模式的目的是封装一些施加于...

23350
来自专栏Golang语言社区

网络后台开发面试题

1.C++模板的作用。 将算法与具体对象分离,与类型无关,通用,节省精力 2.socket编程,如果client断电了,服务器如何快速知道??? 有以下几个...

68680

扫码关注云+社区

领取腾讯云代金券