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);
}
Android 学习笔记之AndBase框架学习(四) 使用封装好的函数实现单,多线程任务的更多相关文章
- Android 学习笔记之AndBase框架学习(六) PullToRefrech 下拉刷新的实现
PS:Struggle for a better future 学习内容: 1.PullToRefrech下拉刷新的实现... 不得不说AndBase这个开源框架确实是非常的强大..把大部分的东西 ...
- Android 学习笔记之AndBase框架学习(五) 数据库ORM..注解,数据库对象映射...
PS:好久没写博客了... 学习内容: 1.DAO介绍,通用DAO的简单调度过程.. 2.数据库映射关系... 3.使用泛型+反射+注解封装通用DAO.. 4.使用AndBase框架实现对DAO的调用 ...
- Android 学习笔记之AndBase框架学习(三) 使用封装好的函数完成Http请求..
PS:踏踏实实走好每一步... 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现 ...
- Android 学习笔记之AndBase框架学习(二) 使用封装好的进度框,Toast框,弹出框,确认框...
PS:渐渐明白,在实验室呆三年都不如在企业呆一年... 学习内容: 1.使用AbActivity内部封装的方法实现进度框,Toast框,弹出框,确认框... AndBase中AbActivity封 ...
- Android 学习笔记之AndBase框架学习(一) 实现多功能标题栏
PS:Volley框架终于通过看源码的方式完成了所有的学习..开始学习AndBase...AndBase的源码实在是多的离谱...因此就不对所有的源码进行分析了... 学习内容: 1.使用AndBas ...
- Android 学习笔记之AndBase框架学习(七) SlidingMenu滑动菜单的实现
PS:努力的往前飞..再累也无所谓.. 学习内容: 1.使用SlidingMenu实现滑动菜单.. SlidingMenu滑动菜单..滑动菜单在绝大多数app中也是存在的..非常的实用..Gith ...
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- Hadoop学习笔记—16.Pig框架学习
一.关于Pig:别以为猪不能干活 1.1 Pig的简介 Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换 ...
- Hadoop学习笔记—17.Hive框架学习
一.Hive:一个牛逼的数据仓库 1.1 神马是Hive? Hive 是建立在 Hadoop 基础上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储. ...
随机推荐
- 集群: 如何在spring 任务中 获得集群中的一个web 容器的端口号?
系统是两台机器, 跑四个 web 容器, 每台机器两个容器 . nginx+memcached+quartz集群,web容器为 tomcat . web 应用中 用到spring 跑多个任务,任务只能 ...
- Nodejs npm安装socket.io报错解决办法
安装socket.io时,报错,提示需要安装Microsoft visual studio 2005 或 Net framework 2.0 sdk,没有找到vcbuild.exe,解决办法是安装 . ...
- 利用 Python 只连接一次 MySQL
Github 地址 项目背景 最近做个项目,需要进行试驾分析,所谓"试驾",是指顾客在 4S 店指定人员的陪同下,沿着指定的路线驾驶车辆,从而了解这款汽车的行驶性能和操控性能.通常 ...
- ISO/IEC 9899 C语言标准(非官方翻译)
本系列博文将以ISO/IEC 9899最新的官方手册为准,然后再添加GCC以及Clang编译器对标准的扩展. 本系列博文将不仅仅是针对C编程语言(C Programming Language)标准的翻 ...
- Android开发:第四日番外——Assets文件夹和RAW文件夹区别
话说上回说到SQLite数据库,其中涉及到把已经设计好的数据库打包到APK中,提到可以放置在Assert文件夹或者RAW文件夹中,那么两者到底有什么区别呢?让我们来探究一下. 一.res/raw和as ...
- Android开发(三十一)——重复引用包错误Conversion to Dalvik format failed
错误:Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Landroid/sup ...
- 读匿名object对象的属性值
读匿名object对象的属性值 1.定义读object对象值的功能方法 public static class StaticClass { public static string ValueByKe ...
- 单元测试mock之mockito使用
先来一个简单的例子来感受一下 外部接口类:TestService.java package com.yzl.mock; /** * 测试用服务 * * @author yangzhilong */ p ...
- Difference between LET and LET* in Common LISP
Difference between LET and LET* in Common LISP LET Parallel binding which means the bindings com ...
- SQL的主键和外键约束
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...