文档章节

关于AsyncTask的一些总结

xaozu
 xaozu
发布于 2014/01/18 16:50
字数 493
阅读 192
收藏 8
     //实现异步的内部类

    /**
     * 第一个参数:String 
     * 传入:在调用该类对象时传入的参数
     * 如:MyTask myTask=new MyTask(Context) myTask.execute(string)
     * 调用:doInBackground(String... strings)
     * strings是这个参数,通常用strings[0]使用
     * 
     * 第二个参数:Integer 更新进度的参数 
     * 传入:调用publishProgress(int);传入
     * 调用:onProgressUpdate(Integer... values)调用
     * values是这个参数,values[0]使用
     * 
     * 第三个参数:外部线程doInBackground(String... strings)执行的结果,是        这个方法的返回值
     * 传入:给doInBackground()设置的返回值就是这个参数
     * 调用:onPostExecute(String s)调用
     * s 是这个参数
     */
    class  MyTask  extends AsyncTask< String, Integer, String > {
        private Context context;
        ProgressDialog pdialog;
        /**
        构造方法
        可以在这初始化一些变量
        */
        public MyTask(Context context){
            this.context=context;
        }
        /**
         该方法将在执行实际的后台操作前被UI thread调用。
         可以在该方法中做一些准备工作,如在界面上显示一个进度条
         */
        protected void onPreExecute() {
            pdialog=new  ProgressDialog(context, 0);
            super.onPreExecute();
        }

        /**
        该方法运行在后台线程中。
        这里将主要负责执行那些很耗时的后台计算工作。
        可以调用 publishProgress方法来更新实时的任务进度。
        该方法是抽象方法,子类必须实现。
        */
        protected String doInBackground(String... strings) {
            for(int i=0;i<100;i++){
                try {
                    //publishProgress这个方法
                    //会获取实时进度传递给onProgressUpdate
                    publishProgress(i);
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            return null;
        }
        /**
        在publishProgress方法被调用后,
        UI thread将调用这个方法从而在界面上展示任务的进展情况,
        例如通过一个进度条进行展示。
         */
        protected   void  onProgressUpdate(Integer... values) {
            pdialog.setProgress(values[0]);//在这里更新进度条
        }

       /**
       在doInBackground 执行完成后,
       onPostExecute 方法将被UI thread调用,
       后台的计算结果将通过该方法传递到UI thread.
       */
        protected void onPostExecute(String s) {
            //显示结果的地方
            super.onPostExecute(s);
        }
    }

运行顺序:从上到下

onPreExecute() 

doInBackground(String... strings) 

onProgressUpdate(Integer... values) //在publishProgress方法被调用后才调用

onPostExecute(String s)

© 著作权归作者所有

共有 人打赏支持
xaozu
粉丝 5
博文 25
码字总数 12419
作品 0
宝山
程序员
私信 提问
android AsyncTask 的分析与运用

线程 在Android当中,通常将线程分为两种,一种叫做Main Thread,除了Main Thread之外的线程都可称为Worker Thread。 当一个应用程序运行的时候,Android操作系统就会给该应用程序启动一个线...

ostracod
2017/03/28
0
0
AsyncTask的用法总结

在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好的用户体验。但是在子线程中无法去操作主线程(U...

fjabing
2014/02/14
0
0
关于AsyncTask的一次深度解析

前言 任何一个Android 开发者对AsnycTask 都应该不陌生;使用AsyncTask可以很方便的异步处理耗时操作;AsyncTask内部对Handler和Thread进行了封装,简化了Handler的使用方式,使用起来非常方...

IAM四十二
2018/10/24
0
0
Android AsyncTask完全解析

我们都知道,Android UI 是线程不安全的,如果想要在子线程里进行UI 操作,就需要借助Android 的异步消息处理机制。之前我也写过了一篇文章从源码层面分析了Android 的异步消息处理机制,感兴...

yid11
2014/08/03
478
0
一套完善的Android异步任务类

今天向大家介绍一个很有用的异步任务类处理类,分别包含了AsyncTask各个环节中的异常处理、大量并发执行而不发生异常、字符串数据缓存等功能。并且感谢@马天宇(http://litesuits.com/)的合作...

kymjs张涛
2014/11/30
0
19

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
3
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
3
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部