博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android线程之AsyncTask
阅读量:7188 次
发布时间:2019-06-29

本文共 2178 字,大约阅读时间需要 7 分钟。

  在之前的博客中为大家分享过关于Android多线程处理,想必大家对于Android为什么要使用多线程已经有了清晰的认识,我就在简单唠两句,Android规定UI界面的更新必须在在主线程进行,对于访问网络的耗时操作必须在子线程中执行,所以如果你想成为一名真正的Android开发工程师,多线程是你的必修课。本篇带给大家关于Android为我们封装好的一个简单的线程类AsyncTask。

  AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.对于AsyncTask的详细介绍请大家查看:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html

  AsyncTask中Android为我们封装了四个方法,具体的介绍请看下图:

  

  看到这里你大概对于AsyncTask已经有了一定的认识,下面我将以一个进度条效果带领大家进一步了解它。

  我们的布局文件activity_main.xml没有太多的控件,仅仅一个水平进度条:

  我们的主Activity:

public class MainActivity extends Activity {    private ProgressBar mProgressBar;    private MyAsyncTask mTast;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mProgressBar = (ProgressBar) findViewById(R.id.progressBar1);        mTast = new MyAsyncTask();//创建我们自定义的AsyncTask        mTast.execute();            }    //防止我们重新打开时,线程出现等待    @Override    protected void onPause() {        super.onPause();        if(mTast != null && mTast.getStatus() == AsyncTask.Status.RUNNING){            //cancel()方法只是将对应的AsyncTask标记为cancel状态,并不是真正的取消线程的执行。            mTast.cancel(true);        }    }        class MyAsyncTask extends AsyncTask
{ //doInBackground()方法是AsyncTask中四个方法中唯一的不在主线程执行的方法 @Override protected Void doInBackground(Void... arg0) { for(int i=0; i<100; i++){ if(isCancelled()){
//判断cancel的状态 break; } publishProgress(i); try { Thread.sleep(300);//模拟网络加载 } catch (InterruptedException e) { e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); if(isCancelled()){
//判断cancel的状态 return; } mProgressBar.setProgress(values[0]); } } }

  代码上没有什么难点,关键部位已经为大家注释,大家如果还有疑问,请留言讨论。

  

你可能感兴趣的文章
教你玩转django
查看>>
LINUX 安全运维 (一)
查看>>
Maven学习总结(九)——使用Nexus搭建Maven私服
查看>>
Java基础学习总结(1)——equals方法
查看>>
PHP整理笔记七字符串处理
查看>>
我的友情链接
查看>>
apr
查看>>
kali linux常用软件配置记录
查看>>
RabbitMQ学习总结(6)——消息的路由分发机制详解
查看>>
2018-04-27 Linux学习
查看>>
ansible+jenkins+svn实现生产环境自动发布
查看>>
Java Web学习总结(5)——HttpServletResponse对象详解
查看>>
学习笔记(13)
查看>>
curl命令使用大全
查看>>
Netty4 之 简单搭建WebSocket服务
查看>>
我的Git忽略文件
查看>>
C# 项目异常处理的总结 C# 项目异常处理的总结 .NET异常处理总结
查看>>
【易语言作品】夜猫护眼宝 PC版 大神勿喷,语言是国产的易语言!
查看>>
Java基础学习总结(3)——抽象类
查看>>
安装Apache
查看>>