Android-AsyncTask初体验

原创 2015年11月20日 01:17:30

AsyncTask学习记录

AsyncTask介绍

  • 异步任务
  • 为了解决不能在主线程做耗时操作,不能在子线程更新UI
  • 是android提供的轻量级的异步类,简单,快捷

具体详细代码如下(布局过于简单这就不给出了)

public class MyAsyncTaskText extends Activity
{
    private TextView startText, progerssText, endText;
    private Button startBtn;
    private MyAsync myAsync;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startText = (TextView) findViewById(R.id.text1);
        progerssText = (TextView) findViewById(R.id.text2);
        endText = (TextView) findViewById(R.id.text3);
        startBtn = (Button) findViewById(R.id.button1);
        myAsync = new MyAsync();
        startBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
            //执行异步AsyncTask,并传入可变参数,它的doInBackground方法能收到
                myAsync.execute("a","b");
            }
        });
    }
        /**
     * 使用步骤
     * 1、写一个类继承自AsyncTask
     * 有三个范型
     * 1、请求参数的类型
     * 2、进度的类型
     * 3、返回结果的类型
     */
    class MyAsync extends AsyncTask<String, Integer, String>
    {
            /**
         * 相当于子线程的操作
         * 参数:String...     这叫可变参数(可以传0~n) 相当于一个数组
         * 在调用异步任务的时候传递过来的
         * 返回值   会将返回的结果返回到onPostExecute的方法中
         * 必须重写
         */
        @Override
        protected String doInBackground(String... params) {
            //用来处理字符串变化
            StringBuilder builder = new StringBuilder(Arrays.toString(params));
            int i = 0;
            while(builder.length() < 30)
            {
                //每隔0.2秒添加一个字符,并更新进程
                builder.append(i++);
                //更新进程,此时会自动调用onProgressUpdate方法
                publishProgress(i);
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return builder.toString();
        }
        //这下面的三个方法都能更新UI
        //当异步任务开始执行的时候调用
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            startText.setText("开始执行异步操作");          
        }
                /**
         * 必须调用publishProgress(values)方法才能调用到onProgressUpdate方法
         * 当进度更新的时候调用
         */
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            progerssText.setText("当前进度 :" + values[0]);
        }
         /**  
     * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值)  
     * 在doInBackground方法执行结束之后在运行,并且运行在UI线程当中 可以对UI空间进行设置  
     */ 
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            endText.setText("异步操作执行结束\n result=" + result);
        }
    }
}

最终效果如下

最终效果图

我的感受

  • 现在我感觉这东西真是太好用了,只需覆写几个方法,就可以对线程当前状态进行观察,而且在onPreExecute、onProgressUpdate、onPostExecute中还能对UI控件进行操作
  • 这东西用来做进度条是再好不过的了
  • 结构很明了

想说的话

  • 博客坚持写,不管怎样,今后学习了新的东西就在这里记录一下,以便今后回顾,也希望小小笔记能帮助你们
  • 若内容有什么地方不对、不清楚,望吐槽,希望大家能一起快乐学习和成长
  • 来一句:有时候我们的想法会被否决,即便后来发现我们是对的,也不可存在怨恨情绪,或者说类似于“我老早就说过会这样,还不信”的话。不要让团队之间由此产生间隙,不要因为这点小事耿耿于怀、常常抱怨。
版权声明:本文为博主原创文章,未经博主允许不得转载。

android-AsyncTask

AsyncTask是一种异步处理工具,在执行一些耗时操作如下载或请求接口数据等都会想到它。对于这个抽象类, 我们直接写个子类或内部类继承它,还要给定它的三个泛型: Params:执行doInBac...
  • qq707548235
  • qq707548235
  • 2016年02月21日 11:13
  • 145

Android-AsyncTask

AsyncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI...
  • sinat_31057219
  • sinat_31057219
  • 2017年06月17日 11:01
  • 181

firewalld-cmd初体验

firewalld基本命令[root@localhost ~]# firewall-cmd –state ##查看firewalld状态 [root@localhost ~]# ...
  • Error_404notFound
  • Error_404notFound
  • 2017年06月08日 22:39
  • 264

程序员初体验

故事开头先介绍下自己吧(别介绍了,没人看)还是要有点礼貌吧,博主大三刚刚上完的一个普通全日制本科学生,,博客这个东西开始一直认为是那些有逼格的大牛们写的,像我们这种小老弟负责阅读转载就行,(那你为什么...
  • wangzili1995
  • wangzili1995
  • 2017年07月29日 22:12
  • 116

intellj idea 初体验

转idea 遇到了一个小问题就处理了两天时间,不过好在 这两天工作上也没什么事。 问题是这样子的,新检出一个项目之后部署到tomcat之后发现tomcat启动不报错,server和tomcat lo...
  • streetlight8023
  • streetlight8023
  • 2016年07月26日 18:07
  • 154

android-AsyncTask类

public abstract class AsyncTask extends Object java.lang.Object     android.os.AsyncTask ...
  • ofreelander
  • ofreelander
  • 2015年04月22日 16:37
  • 252

安装Linux mint12初体验(1)

作者:renkai611919 转自:http://blog.csdn.net/renkai611919/article/details/7251546
  • whw8007
  • whw8007
  • 2014年09月09日 16:30
  • 373

ztree (一)----初体验

API地址http://www.ztree.me/v3/api.php1.settingvar setting = { check:{ ...
  • Mooner_guo
  • Mooner_guo
  • 2015年09月27日 09:56
  • 391

canvas初体验

第一次尝试使用canvas来做一个有关验证码的效果 接下来直接上代码,代码里有注释便于大家理解: @charset "utf-8"; /* CSS Document */ body{ba...
  • u012763269
  • u012763269
  • 2015年07月22日 10:09
  • 650

impress.js初体验 - 前端装X利器

博客一歇就是半年,略惭愧...元旦假期各种惬意:打打Dota(悲催的输多赢少)、滑滑雪;吃吃东西、逛逛街。转眼儿今天就得上班了,5点早早起床(最近坚持早睡早起),忍不住分享下前段时间发现的前端工程师装...
  • u012491166
  • u012491166
  • 2015年01月19日 14:00
  • 505
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android-AsyncTask初体验
举报原因:
原因补充:

(最多只允许输入30个字)