EasyThread通过对原生的线程池进行封装,可让你更方便的进行线程任务操作。

特性

简单轻巧:方法数不过百,无额外次级依赖。

配置灵活:可方便、灵活的对每次所启动的任务,配置线程名、线程优先级等。

使用安全:当线程出现异常。能自动将catch异常信息传递给用户,避免出现crash。

线程切换:自带线程切换功能:指定任务执行后,在哪个线程中进行用户通知。

回调通知:当任务启动时与任务运行完毕后。有分别的生命周期作为通知。

任务扩展:支持延迟任务以及异步回调任务

依赖

// 添加jitPack仓库使用

maven { url 'https://jitpack.io' }

// 添加依赖

compile "com.github.yjfnypeu:EasyThread:0.5.0"

复制代码

基本用法

使用方式分两步走:

第一步:创建EasyThread实例。每个EasyThread实例会持有一个独立的线程池提供使用。

EasyThread easyThread = EasyThread.Builder

//提供了四种create方法,用于根据需要创建不同类型的线程池进行使用

//比如createSingle():表示创建一个单例的线程池进行使用

.createXXX()

.build();

复制代码第二步:使用创建的EasyThread实例进行任务执行:

EasyThread支持执行四种任务:

1. 普通Runnable任务

easyThread.execute(new Runnable(){

@Override

public void run() {

// do something.

}

});

复制代码

2. 普通Callable任务

Future task = easyThread.submit(new Callback(){

@Override

public User call() throws Exception {

// do something

return user;

}

})

User result = task.get();

复制代码

3. 异步回调任务

// 异步执行任务

Callable callable = new Callable(){

@Override

public User call() throws Exception {

// do something

return user;

}

}

// 异步回调

AsyncCallback async = new AsyncCallback() {

@Override

public void onSuccess(User user) {

// notify success;

}

@Override

public void onFailed(Throwable t) {

// notify failed.

}

};

// 启动异步任务

easyThread.async(callable, async)

复制代码

4. 延迟后台任务

// 在启动任务前,调用delay方法,指定延迟时间即可

easyThread.setDelay(time, unit)

.execute(runnable);

复制代码

e.g 延迟3秒启动执行任务

easyThread.setDelay(3, TimeUnit.SECONDS)

.execute(task);

复制代码

高级配置

EasyThread提供了各种的额外配置,通过这些配置可以让线程操作使用起来更加得心应手。

两种配置方式

这里我们以配置后台优先级进行说明:

1. 配置默认线程任务优先级(默认配置)

EasyThread.Builder.createXXX().setPriority(priority);

复制代码

2. 配置当前线程任务优先级(当前任务配置)

easyThread.setPriority(priority).execute(task);

复制代码

线程优先级及线程名

配置方式:

easyThread.setName(name)// 配置线程任务名

.setPriority()// 配置线程运行优先级

复制代码

任务回调通知

接口说明:

public interface Callback{

// 线程任务启动时的通知

void onStart (String threadName);

// 线程任务运行时出现异常时的通知

void onError (String threadName, Throwable t);

// 线程任务正常执行完成时的通知

void onCompleted (String threadName);

}

复制代码

配置方式:

easyThread.setCallback(callback);

复制代码

消息派发器

消息派发器用于消息回调线程切换,即指定回调任务需要运行在什么线程之上。

比如说在Android平台,很常见的就是回调时需要进行界面通知,所以这个时候就需要回调通知运行在UI线,便于操作。

配置方式:

// 派发器的实例类型为java.util.concurrent.Executor子类

easyThread.setDeliver(deliver);

复制代码

在默认条件下(即未配置额外的派发器时),在Android或者Java平台,分别适配了不同的回调派发逻辑:

在纯java环境下:回调方法所运行的线程与任务执行线程一致

在Android环境:回调方法默认运行于主线程

推荐配置

对于APP来说。线程资源是宝贵的。为了避免创建过多额外的线程,所以建议对每个app。提供一个统一的管理器维护所有的线程池,如下所示:

public final class ThreadManager{

private final static EasyThread io;

private final static EasyThread cache;

private final static EasyThread calculator;

private final static EasyThread file;

public static EasyThread getIO (){

return io;

}

public static EasyThread getCache(){

return cache;

}

public static EasyThread getCalculator(){

return calculator;

}

public static EasyThread getFile(){

return file;

}

static {

io = EasyThread.Builder.createFixed(6).setName("IO").setPriority(7).setCallback(new DefaultCallback()).build();

cache = EasyThread.Builder.createCacheable().setName("cache").setCallback(new DefaultCallback()).build();

calculator = EasyThread.Builder.createFixed(4).setName("calculator").setPriority(Thread.MAX_PRIORITY).setCallback(new DefaultCallback()).build();

file = EasyThread.Builder.createFixed(4).setName("file").setPriority(3).setCallback(new DefaultCallback()).build();

}

private static class DefaultCallback implements Callback{

@Override

public void onError(String threadName, Throwable t){

MyLog.e("Task with thread %s has occurs an error: %s", threadName, t.getMessage());

}

@Override

public void onCompleted(String threadName){

MyLog.d("Task with thread %s completed", threadName);

}

@Override

public void onStart(String threadName){

MyLog.d("Task with thread %s start running!", threadName);

}

}

}

复制代码

android的线程管理器,[Android开源]:一款安全、轻巧、简单的线程池管理器EasyThread...相关推荐

  1. 实现自己的operator new和operator delete以及实现一个简单的内存池管理类

    为什么有必要写自己的operator new和operator delete? 为了效率.缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特 ...

  2. 两种内存池管理方法对比

    一.问题背景 最近在调试ambiq apollo3的蓝牙时,其使用了ARM Cordio WSF的蓝牙协议栈.通过学习wsf_buf.c的实现,看到了一种不同于固定大小内存块的内存池管理方式.它使用了 ...

  3. 推荐一个好的节拍器软件?3款App帮你成为节奏大师

    推荐一个好的节拍器软件?用节拍器练习的方法开始先设置好需要的速度,比如60就是一分钟响60下,120就是一分钟响120下以此类推,初学者练习单音的时候调到60-80就好了.然后调节好拍子,如3/4拍2 ...

  4. android 带记忆功能的播放器源码,【全开源可二开】带后台管理面板的在线音乐播放器Android应用APP源码...

    这是一款带后台管理面板的在线音乐播放器Android应用APP源码,可让您更快地构建在线和离线android音频播放器,代码全开源适合二次开发.该源码自带2个紫色和橙色主题(允许您添加更多主题),多语 ...

  5. 文件管理器android开源,寻找优秀的安卓文件管理器 五款文件管理器大评比

    文件管理器是手机的必备软件,无论在以前的塞班还是如今的Android.没有文件管理器,即使手机里的各种文件和文件夹都乱了套不说,从电脑传输到手机里的精彩应用也没法打开.Android作为目前普及率最高 ...

  6. 超级管理器Android,超级文件管理器app

    详情 超级文件管理器app,一款帮助你管理手机内存的软件,还可以重命名,移动,删除文件,在Android平台上完美运行,并能够与其他OI系列软件结合使用! 能快速地查找到目标文件,十分方便用户管理自己 ...

  7. Android多线程操作——线程池管理综述

    1 前言 android开发,大家最熟悉的肯定是主线程,也就是ui线程,也都知道在非ui线程更新界面会报错提示不允许在子线程更新ui.但是耗时操作还是需要使用子线程,如: new Thread(new ...

  8. Android时间触发,设置闹钟管理器Android中的时间 - 立即触发闹钟

    这里我试图通过使用AlarmManger类设置闹钟.它与我工作正常,但当我设置闹钟时间后小时或分钟时间选择器,它会立即启动时,我保存该报警.闹钟.我需要警报熄灭,直到我设定时间. 下面是我的代码正在工 ...

  9. 运行android sdk管理器,Android SDK 安装配置

    Android SDK 可以通过 Android Command line tools(叫命令行工具或 SDK 工具)手动安装,也可以让 Android Studio 自动帮你下载安装,这里详细描述手 ...

最新文章

  1. poj2449(k短路算法)
  2. python 迭代器
  3. DB9公母头引脚定义
  4. 牛客题霸 [二叉树中是否存在节点和为指定值的路径] C++题解/答案
  5. nn.Conv2d(nc, ndf, 4, 2, 1, bias=False),nc、ndf是什么?
  6. python适合机器视觉_Python机器视觉编程常用数据结构与示例
  7. nodejs实践录:简单的log日志模块
  8. shell脚本编程之循环控制语句(continue/break/sleep)
  9. Remote Desktop Connection 7.0
  10. jade模板引擎入门教程
  11. Java设计模式汇总详解
  12. python和jieba库进行简单文本处理之天龙八部小说
  13. bing 搜索引擎 无法访问 bug
  14. 2018中国开源开发者调查问卷
  15. 京东价格监控软件开发技术探讨十四:电商领域区块链融合模式采集的探讨
  16. python培训深圳周末班
  17. vue3 +Element-puls ,table 中使用$refs修改scrollTop 到顶部
  18. 2020年6月7日日记
  19. linux定时任务整点执行,Linux 设置定时任务crontab命令
  20. 卓有成效管理者的原则

热门文章

  1. CROSS APPLY 和outer apply
  2. python爬虫反爬机制_浅谈爬虫及绕过网站反爬取机制之Python深度应用
  3. java 链表 最小堆优先级队列_关于Java集合的小抄
  4. java 发送qq消息_php发送qq消息
  5. java object 引用类型_java中的四种引用类型
  6. 2019年四月计算机语言排名,2019编程语言排行榜_编程语言排行榜2019年4月 TIOBE编程语言排行榜2019年最...
  7. abort has been called翻译_2020年12月大学英语四级翻译练习题:股票投资_四级
  8. 小学一年级第一次上计算机课,小学一年级上册信息技术教案【三篇】
  9. Linux运行hadoop命令,将hadoop程序打成jar包,在linux下以命令行方式运行(例如单词计算程序)...
  10. 计算机技术+智能化水电站,水电工程BIM用太少?水电工程BIM案例全解读