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开发学习之路--异步消息Handler,Message,Looper和AsyncTask之初体验

在简易音乐播放器中,用了Handler,也没有过多地去研究学习,这里再学习下android下的异步消息处理机制。这里用了Handler主要是在线程中不能更新UI,而需要通过Handler才可以。关于异...

Android初体验

  • 2011年09月26日 17:26
  • 1.31MB
  • 下载

Android初体验

  • 2010年04月15日 18:24
  • 1.39MB
  • 下载

使用Kotlin开发Android应用初体验

使用Kotlin开发Android应用初体验昨晚,最近一届的谷歌IO大会正式将Kotlin确定为了官方开发语言,作为一名Android开发鸟,怎么能不及时尝尝鲜呢?Kotlin的简要介绍在开发之前,很...

Android插件化开发之Atlas初体验

  • 2015年08月12日 16:27
  • 11.95MB
  • 下载

Android使用Kotlin初体验

Kotlin是Google推荐的Android开发语言,相对于java,kotlin的代码更加简洁。kotlin可以结合anko实现xml布局的功能,可以结合kotterknife,RxKotlin提...

Android UI设计初体验(模仿微信登录界面)

虽然说软件分工的目的在于各司其职更有效地完成开发任务,但在我写代码的过程中总是忍不住搞搞美工的事。(估计骨子里是个搞美工的) 因为软件的好坏,有时候不是从功能上评价的,而是从外观上。而美工这活,绿色...
  • wkw1125
  • wkw1125
  • 2015年09月13日 14:03
  • 3630

Android开发学习之路--网络编程之初体验

一般手机都是需要上网的,一般我们的浏览器就是个webview。这里简单实现下下功能,先编写Android的layout布局: ...

Android开发学习之路--Camera之初体验

顾名思义Camera就是拍照和录像的功能,像微信里面,我们想拍照传一下照片,就可以通过camera来拍照,然后存储照片,发送给好友。那么微信的app里面是不会直接通过camera api来实现的,因为...

Android开发学习之路--传感器之初体验

说到传感器,还是有很多的,有加速度啊,光照啊,磁传感器等等。当然android手机之所以称为智能手机,少不了这几款传感器的功劳了。下面就学习下了,这里主要学习光照,加速度和磁。     新建工程emS...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android-AsyncTask初体验
举报原因:
原因补充:

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