网易博客迁移:Android专题之AsyncTask(二)简单AsyncTask例子解决线程阻塞

版权声明:本文为博主原创文章,不得随意转载,转载请注明出处!!! https://blog.csdn.net/YuDBL/article/details/83927863

在本系列的上一篇文章中,我们学习了AsyncTask的有关基本概念,相信应该有所了解了。还没有看过上一篇文章的朋友,建议先去阅读 Android专题之AsyncTask(一)基本概念介绍 下面这篇文章我将介绍基本方法的使用,写一个简单的AsyncTask异步操作解决上一篇文章提到的线程阻塞问题

一般程序是分为两个线程来执行的:第一个是UI线程,第二个是异步线程。那么异步任务AsyncTask的整体执行过程,在每个方法里面都可以做什么操作呢?下面我们来做一个简单的例子。。。

一、基本思路

1、在MainActivity里面添加两个按钮,一个称为“网络操作按钮”,一个称为“打印按钮”,然后给他们设置监听

2、新建NetOperator网络操作类,用线程睡眠进行模拟

/**

* @ClassName:NetOperator

* @Package:com.huazi.AsyncTask2

* @Description:(可以在这里描述这个类的作用)

* 模拟访问网络的操作,只要生成NetOperator类的对象,调用它的operator方法,线程就会进入休眠状态。

* @author:luminal、邮箱 [email protected]

* @date:2012-12-10 上午11:43:23

* @update:2018-11-15 下午12:30:18

*/

public class NetOperator {

public void operate(){

try{

Thread.sleep(5*1000);//Thread代表线程。其实线程的休眠,就属于线程的一种阻塞事件。

}catch(InterruptedException e){

e.printStackTrace();

}

}

}

3、“打印按钮”的监听里面

就输出字符串即可。如:System.out.println("我在输出信息!");  或 Log.v(TAG, "我在输出信息!");

4、写AsyncTask异步类

继承AsyncTask类,重写doInBackground方法,在方法里面调用执行NetOperator网络操作类

//Void这个类的首字母是大写的,这个类的对象代表空,专门为泛型所设计的。

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

//这个方法是在后台运行的。在一个新线程中运行,它和MainActivity不在同一个线程中运行。

@Override

protected Void doInBackground(Void... params) {//返回值为Void,参数也是Void类型

NetOperator netOperator=new NetOperator();//引用自定义的外部类NetOperator

netOperator.operate();

return null;

}

}

5、“网络操作按钮”的监听里面

里面调用FirstAsyncTask,执行execute方法,进行测试网络操作,不会影响UI线程的执行了

同样最后整理一个Demo分享给大家,坚持写博客不易欢迎大家留言讨论支持!

点击源码下载:02_AsyncTask_简单演示AsyncTask异步操作

效果演示如下图:操作点击“开始网络操作”开始睡眠,连续多次点击“打印一个字符串”,并不会像上篇文章那样“没有反应,然后再一起打印”啦!下一篇我们将介绍类和方法的具体使用:Android专题之AsyncTask(三)异步方法操作之进度条


 

猜你喜欢

转载自blog.csdn.net/YuDBL/article/details/83927863