Android 学习笔记之AndBase框架学习(四) 使用封装好的函数实现单,多线程任务

PS:Force Is Meaningless Without Skill

学习内容:

1.使用AndBase实现单线程任务...

2.使用AndBase实现多线程任务...

  AndBase内部封装了多种方法,我们可以使用这些方法构建单线程任务和多线程任务..一般线程任务用于执行耗时的操作...比如说下载什么安装包,文件等数据量较大的东西,我们是必须要开启一个异步线程或者是同步线程来执行操作...如果任务过多,那么我们就可以使用任务请求队列或者是线程池来处理多个任务...这样可以节省很多的时间...

  涉及到的类为com.ab.task包中大部分类..AbThread.java , AbTaskPool.java , AbTaskQueue.java , AbTask.java是任务调度类的实现..功能不太相同..不过总体处理任务的添加和处理模式基本都是相同的...

  首先需要建立处理任务的线程对象...无论是异步线程,同步线程,还是线程池都需要先建立对象..然后对任务进行添加...添加完之后,线程会对任务进行处理..最后把结果返回..任务的建立需要使用到AbTaskItem...item会绑定上一个position,listener,result..这三个变量表示当前任务的任务号,任务执行监听,以及执行后的结果..

  任务的listener需要绑定..通过AbTaskListener来进行绑定..这个监听包含两个方法..一个是执行过程中的方法..也就是任务需要做的事情..get()函数...一个是任务执行完毕后需要执行的操作...update()函数..

1.使用AndBase实现单线程任务...

  实现单线程任务非常的简单..实现由两种方式..一个是使用Handler Message机制来处理当前的任务,一个是使用AsyncTask来处理当前的任务...

  先说说Handler Message线程执行任务...

public void ThreadClick(View v){
        //单个线程执行任务...

        //创建一个线程对象..
        AbThread thread=new AbThread();

        //定义一个任务对象...
        final AbTaskItem item=new AbTaskItem();
        item.listener=new AbTaskListener(){

            @Override
            public void update(){
                showToast("执行完成");
            }

            @Override
            public void get(){
                                //耗时的操作...
                showToastInThread("开始执行");//这步必须使用一个线程来显示Toast框..因为当前线程已经去处理当前任务了..
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            };
        };

        thread.execute(item); //向处理线程中加入任务..
    }

  这个过程和我上面说的基本是一样的...首先建立一个任务执行对象...然后定义一个任务请求..为这个请求设置相关监听..实现内部的方法...当任务处理完成后..调用handler Message机制来完成对结果的发送...最后通过update()中的方法来告知任务已经处理完毕...

 再来看看异步线程执行单个任务...

 异步线程执行任务其实效果是一样的...异步线程继承与AsyncTask..有基础的都应该很清楚AsyncTask,后台线程..可以通过在后台执行任务来更新UI界面...

public void TaskClick(View v){

        //异步任务执行..
        AbTask task=new AbTask();

        //定义任务对象...

        AbTaskItem item=new AbTaskItem();
        item.listener=new AbTaskListener(){

            @Override
            public void get(){
                showToastInThread("开始执行");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            @Override
            public void update(){
                showToast("执行完成");
            }

        };
        task.execute(item);
    }

  模式基本都是一样的,不过一个是使用了继承AsyncTask实现了异步的加载..一个使用了Handler Message...

2.使用AndBase实现多线程任务...

  多线程任务其实也非常的简单...一个是使用了任务队列的方式先对任务进行保存,将任务队列提交给线程池,由线程池来进行相关的处理...另一个则是直接将任务添加到线程池内部..由线程池对任务进行相关的处理...

  采用任务队列的方式将任务添加到队列当中,然后将当前队列提交给线程池..由线程池来完成这些任务的处理..

    public void QueueClick(View v){
        //线程任务队列...
        AbTaskQueue queue=new AbTaskQueue();
        //定义一个任务..
        AbTaskItem item=new AbTaskItem();
        AbTaskItem item_1=new AbTaskItem();
        item.listener=new AbTaskListener(){

            @Override
            public void update(){
                showToast("执行完成");
            }

            @Override
            public void get(){
                showToastInThread("任务执行1");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        };

        item_1.listener=new AbTaskListener(){

            @Override
            public void update(){
                showToast("执行完成");
            }

            @Override
            public void get(){
                showToastInThread("任务执行2");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        };
        queue.execute(item);
        queue.execute(item_1);

        //强制停止..
//        queue.quit();

        //强制停止前面的请求..
//        queue.execute(item_1, true);

    }

  采用直接将任务提交给线程池,然后由线程池来对任务进行处理...感觉二者的模式区别不是非常的大...

public void PoolClick(View v){
        //任务线程池...
        AbTaskPool pool=AbTaskPool.getInstance();

        AbTaskItem item=new AbTaskItem();
        AbTaskItem item_1=new AbTaskItem();

        item.listener=new AbTaskListener(){

            @Override
            public void get(){
                showToastInThread("开始执行1");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            @Override
            public void update(){
                removeProgressDialog();
                showToast("执行完成1");
            }

        };

        item_1.listener=new AbTaskListener(){

            @Override
            public void get(){
                showToastInThread("开始执行2");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            @Override
            public void update(){
                removeProgressDialog();
                showToast("任务完成2");
            }
        };
        pool.execute(item);
        pool.execute(item_1);
    }
时间: 2024-10-13 02:01:06

Android 学习笔记之AndBase框架学习(四) 使用封装好的函数实现单,多线程任务的相关文章

Android 学习笔记之AndBase框架学习(五) 数据库ORM..注解,数据库对象映射...

PS:好久没写博客了... 学习内容: 1.DAO介绍,通用DAO的简单调度过程.. 2.数据库映射关系... 3.使用泛型+反射+注解封装通用DAO.. 4.使用AndBase框架实现对DAO的调用实现数据库基本操作.. 1.DAO..   DAO..这个说法大家都不陌生..数据库操作访问对象的抽象接口层..在DAO内部封装好通用的方法..然后再使用一个具体类来进行实现..在我们想要调用这些方法对数据库进行相关操作时..只需要传递数据实体对象,就可以通过实体对象的传递从而实现对数据库进行操作.

Android 学习笔记之AndBase框架学习(三) 使用封装好的函数完成Http请求..

PS:踏踏实实走好每一步... 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现有参Http Get请求...   AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这一模块更加推荐使用Volley框架..楼主对比了两个框架中的源码...Volley更多的地方是使用抽象方法封装在接口

Android 学习笔记之AndBase框架学习(一) 实现多功能标题栏

PS:Volley框架终于通过看源码的方式完成了所有的学习..开始学习AndBase...AndBase的源码实在是多的离谱...因此就不对所有的源码进行分析了... 学习内容: 1.使用AndBase实现多功能标题栏...   AndBase框架内部提供了许多的方式能够使我们去设置一个更好的标题栏,进行动态的改变,而并非静态的将标题栏界面写死...能够使得标题栏更加的美观...总体就是动态的获取布局然后通过对布局的操作来自定义一个良好的标题栏...   使用AndBase框架的时候我们的主函数

Android 学习笔记之AndBase框架学习(二) 使用封装好的进度框,Toast框,弹出框,确认框...

PS:渐渐明白,在实验室呆三年都不如在企业呆一年... 学习内容: 1.使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框...   AndBase中AbActivity封装好了许多方法提供我们去使用,使得在使用的时候更加的方便,只需要传递相关参数即可..省去了我们自己使用基础的函数进行构造...   就好比进度框,Toast框,弹出框,确认框...这些基本的东西都在AndBase的AbActivity封装好了...我们只需要传递参数调用其中内部的方法就可以完成这些视

Android 学习笔记之AndBase框架学习(七) SlidingMenu滑动菜单的实现

PS:努力的往前飞..再累也无所谓.. 学习内容: 1.使用SlidingMenu实现滑动菜单..   SlidingMenu滑动菜单..滑动菜单在绝大多数app中也是存在的..非常的实用..Github有位牛人将这个东西书写成了一个简单的框架..我们只需要通过引用相关的资源就能够完成一个滑动菜单的实现..有了这一层的基础..那么滑动菜单就很容易实现了..就拿我们最为熟悉的QQ来说吧..当我们进行滑动操作的时候..会有一个新的View去覆盖原本的View..我们可以通过触发新的视图上的控件来执行

Hadoop学习笔记—18.Sqoop框架学习

一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加紧帮助客户将重要数据从数据库移到Hadoop.随着Hadoop和关系型数据库之间的数据移动渐渐变成一个标准的流程,云管理员们能够利用Sqoop的并行批量数据加载能力来简化这一流程,降低编写自定义数据加载脚本的需求. Apache Sqoop(SQL-to-Hadoop) 项目旨在协助 RDBMS 与

Hadoop学习笔记—16.Pig框架学习

一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算.Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口. Compare:相比Java的MapReduce API,Pig为大型数据集的处理提供了更高层次的抽象,与MapReduce相比,Pig提供了更丰富的数据结构,一般都是多值和嵌套的数据结构.

Hadoop学习笔记—17.Hive框架学习

一.Hive:一个牛逼的数据仓库 1.1 神马是Hive? Hive 是建立在 Hadoop 基础上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据的机制.Hive 定义了简单的类 SQL  查询语言,称为 QL ,它允许熟悉 SQL  的用户查询数据.同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper  和 reducer 来处理内建的 mapper 和 reduce

Hadoop学习笔记—15.HBase框架学习(基础知识篇)

HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase是一个开源的,分布式的,多版本的,面向列的存储模型,它存储的是松散型数据. 一.HBase:BigTable的开源实现 1.1 HBase出现的背景 (1)随着数据规模越来越大,大量业务场景开始考虑数据存储水平扩展,使得存储服务可以增加/删除,而目前的关系型数据库更专注于一台机器. (2)海量数据量存储成为瓶颈,单台机器无法负载大量数据. (3)单台机器IO读