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线程执行任务...

  1. public void ThreadClick(View v){
  2. //单个线程执行任务...
  3.  
  4. //创建一个线程对象..
  5. AbThread thread=new AbThread();
  6.  
  7. //定义一个任务对象...
  8. final AbTaskItem item=new AbTaskItem();
  9. item.listener=new AbTaskListener(){
  10.  
  11. @Override
  12. public void update(){
  13. showToast("执行完成");
  14. }
  15.  
  16. @Override
  17. public void get(){
  18. //耗时的操作...
  19. showToastInThread("开始执行");//这步必须使用一个线程来显示Toast框..因为当前线程已经去处理当前任务了..
  20. try {
  21. Thread.sleep(3000);
  22. } catch (InterruptedException e) {
  23. // TODO Auto-generated catch block
  24. e.printStackTrace();
  25. }
  26. };
  27. };
  28.  
  29. thread.execute(item); //向处理线程中加入任务..
  30. }

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

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

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

  1. public void TaskClick(View v){
  2.  
  3. //异步任务执行..
  4. AbTask task=new AbTask();
  5.  
  6. //定义任务对象...
  7.  
  8. AbTaskItem item=new AbTaskItem();
  9. item.listener=new AbTaskListener(){
  10.  
  11. @Override
  12. public void get(){
  13. showToastInThread("开始执行");
  14. try {
  15. Thread.sleep(3000);
  16. } catch (InterruptedException e) {
  17. // TODO Auto-generated catch block
  18. e.printStackTrace();
  19. }
  20. }
  21.  
  22. @Override
  23. public void update(){
  24. showToast("执行完成");
  25. }
  26.  
  27. };
  28. task.execute(item);
  29. }

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

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

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

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

  1. public void QueueClick(View v){
  2. //线程任务队列...
  3. AbTaskQueue queue=new AbTaskQueue();
  4. //定义一个任务..
  5. AbTaskItem item=new AbTaskItem();
  6. AbTaskItem item_1=new AbTaskItem();
  7. item.listener=new AbTaskListener(){
  8.  
  9. @Override
  10. public void update(){
  11. showToast("执行完成");
  12. }
  13.  
  14. @Override
  15. public void get(){
  16. showToastInThread("任务执行1");
  17. try {
  18. Thread.sleep(3000);
  19. } catch (InterruptedException e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. }
  23. }
  24.  
  25. };
  26.  
  27. item_1.listener=new AbTaskListener(){
  28.  
  29. @Override
  30. public void update(){
  31. showToast("执行完成");
  32. }
  33.  
  34. @Override
  35. public void get(){
  36. showToastInThread("任务执行2");
  37. try {
  38. Thread.sleep(3000);
  39. } catch (InterruptedException e) {
  40. // TODO Auto-generated catch block
  41. e.printStackTrace();
  42. }
  43. }
  44.  
  45. };
  46. queue.execute(item);
  47. queue.execute(item_1);
  48.  
  49. //强制停止..
  50. // queue.quit();
  51.  
  52. //强制停止前面的请求..
  53. // queue.execute(item_1, true);
  54.  
  55. }

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

  1. public void PoolClick(View v){
  2. //任务线程池...
  3. AbTaskPool pool=AbTaskPool.getInstance();
  4.  
  5. AbTaskItem item=new AbTaskItem();
  6. AbTaskItem item_1=new AbTaskItem();
  7.  
  8. item.listener=new AbTaskListener(){
  9.  
  10. @Override
  11. public void get(){
  12. showToastInThread("开始执行1");
  13. try {
  14. Thread.sleep(3000);
  15. } catch (InterruptedException e) {
  16. // TODO Auto-generated catch block
  17. e.printStackTrace();
  18. }
  19. }
  20.  
  21. @Override
  22. public void update(){
  23. removeProgressDialog();
  24. showToast("执行完成1");
  25. }
  26.  
  27. };
  28.  
  29. item_1.listener=new AbTaskListener(){
  30.  
  31. @Override
  32. public void get(){
  33. showToastInThread("开始执行2");
  34. try {
  35. Thread.sleep(3000);
  36. } catch (InterruptedException e) {
  37. // TODO Auto-generated catch block
  38. e.printStackTrace();
  39. }
  40. }
  41.  
  42. @Override
  43. public void update(){
  44. removeProgressDialog();
  45. showToast("任务完成2");
  46. }
  47. };
  48. pool.execute(item);
  49. pool.execute(item_1);
  50. }

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

  1. Android 学习笔记之AndBase框架学习(六) PullToRefrech 下拉刷新的实现

    PS:Struggle for a better future 学习内容: 1.PullToRefrech下拉刷新的实现...   不得不说AndBase这个开源框架确实是非常的强大..把大部分的东西 ...

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

    PS:好久没写博客了... 学习内容: 1.DAO介绍,通用DAO的简单调度过程.. 2.数据库映射关系... 3.使用泛型+反射+注解封装通用DAO.. 4.使用AndBase框架实现对DAO的调用 ...

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

    PS:踏踏实实走好每一步... 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现 ...

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

    PS:渐渐明白,在实验室呆三年都不如在企业呆一年... 学习内容: 1.使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框...   AndBase中AbActivity封 ...

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

    PS:Volley框架终于通过看源码的方式完成了所有的学习..开始学习AndBase...AndBase的源码实在是多的离谱...因此就不对所有的源码进行分析了... 学习内容: 1.使用AndBas ...

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

    PS:努力的往前飞..再累也无所谓.. 学习内容: 1.使用SlidingMenu实现滑动菜单..   SlidingMenu滑动菜单..滑动菜单在绝大多数app中也是存在的..非常的实用..Gith ...

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

    一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...

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

    一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换 ...

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

    一.Hive:一个牛逼的数据仓库 1.1 神马是Hive? Hive 是建立在 Hadoop 基础上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储. ...

随机推荐

  1. Kerberos ticket lifetime及其它

    前言 之前的博文中涉及到了Kerberos的内容,这里对Kerberos ticket lifetime相关的内容做一个补充. ticket lifetime Kerberos ticket具有lif ...

  2. Ubuntu下vsftpd配置实例,超级简单,高度可用

    看了网上很多关于vsftpd的安装配置教程,发现很多都是不可以用的,经过多次尝试,总结了一个最简单的设置方法. 第一步:安装vsftpd sudo apt-get install vsftpd 第二步 ...

  3. Java和Android文件操作

    File这是文件基类,抽象地代表一个文件实体,它有四个不同的构造方法: File(File dir, String name)  File(String path)   File(String dir ...

  4. 关闭/开启 ubuntu 自动更新提示

    发现vps登陆后只有apt update后才知道有多少包需要更新不是很傻么,本地的ubuntu在登录时就有很好的提示,并且还能告知系统负载情况,很有用,这里就想开起来.首先这个提示的名字叫Motd. ...

  5. python环境中运行程序

    运行Python程序,我们比较常用的是直接在Windows命令提示窗口或者Linux终端或shell窗口中,直接:Python *.py,或者在Linux环境下,在投不中,加入: #!/usr/bin ...

  6. Navi.Soft30.开放平台.百度.开发手册

    1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...

  7. RHEL 6 或者 Oracle Linux 6, 不关机识别新添加的scsi硬盘

    下面看一下在系统不重启的情况,如何让系统认识新的磁盘,并能对其分区与格式化1.在开机状态下新增磁盘2.执行下面的命令 echo "- - -" > /sys/class/sc ...

  8. Erwin 生成 mysql 带注释(comment )的脚本

    Erwin设计数据库非常方便,有逻辑视图和物理视图,可以很方便的生成数据库文档和SQL 脚本.在使用过程中唯一不爽的地方是脚本不能生成comment.   在百度无数次无法解决下,又FQ谷歌,在一个日 ...

  9. SQL的主键和外键约束

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  10. 自定义android RadioButton View,添加较为灵活的布局处理方式

    android的RadioButton的使用历来都让人比较头疼,如在布局方面,图案.文字无法分别设置padding等,另外,低版本的android RadioGroup不支持换行排列的RadioBut ...