Skip to content

Commit

Permalink
Add doc for EasyExecutor
Browse files Browse the repository at this point in the history
  • Loading branch information
yjfnypeu committed Jun 7, 2018
1 parent 766226c commit 8c230c5
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 2 deletions.
33 changes: 33 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ EasyAndroid.init(application)
- [EasyReflect](#easyreflect): 反射操作组件
- [EasyActivityResult](#easyactivityresult): onActivityResult解耦组件
- [EasyPermissions](#easypermissions): 动态权限申请组件
- [EasyExecutor](#easyexecutor): 线程池封装组件
- [MVP](#mvp): 简单MVP架构

### [EasyDimension](./docs/EasyDimension.md)
Expand Down Expand Up @@ -199,6 +200,38 @@ EasyPermissions.create(// 指定待申请权限
.request()
```

### [EasyExecutor](./docs/EasyExecutor.md)

> 用于进行`安全``高效``便利`的线程池操作功能组件
- **安全**: 直接catch住任务执行期间出现的异常。并通知给用户,避免出现crash
- **回调通知**: 执行任务期间,有分别的生命周期作为通知。
- **配置灵活**: 可方便、灵活的对每次所启动的任务,配置线程名、回调等。
- **任务延迟**: 支持在每次启动任务前。指定延迟时间
- **异步任务**: 支持直接启动异步任务并回调传递数据
- **线程切换**: 支持指定回调方法所在的线程。默认为运行于UI线程中

用法示例

```
// 1. 第一步:创建示例
val executor =
// size为所需创建的线程池的大小。当size <= 0时。
// 表示需要使用newCachedThreadPool。
EasyExecutor.newBuilder(size)
.setName(name)// 默认的线程名
.setPriority(priority)// 线程池中创建线程的优先级
.onStart {threadName -> } // 默认任务启动时的回调
.onSuccess {threadName -> }// 默认任务执行完毕后的回调
.onError {threadName, throwable -> }// 默认任务执行出现异常时的回调
.setDeliver(deliver)// 默认的回调任务派发器。用于将信息派发到指定线程去。
.build()// 最后。执行创建
// 2. 第二步:启动任务
executor.execute(runnable:Runnable)// 启动普通任务
executor.async(callable:Callable<T>, result:(T) -> Unit)// 启动异步回调任务
```

### [MVP](./docs/MVP.md)

> 提供的一种简单的MVP分层架构实现。
Expand Down
68 changes: 68 additions & 0 deletions docs/EasyExecutor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# EasyExecutor

用于进行`安全``高效``便利`的线程池操作功能组件

[Sample Activity](../app/src/main/java/com/haoge/sample/easyandroid/activities/EasyExecutorActivity.kt)

## 特性

- **安全**: 直接catch住任务执行期间出现的异常。并通知给用户,避免出现crash
- **回调通知**: 执行任务期间,有分别的生命周期作为通知。
- **配置灵活**: 可方便、灵活的对每次所启动的任务,配置线程名、回调等。
- **任务延迟**: 支持在每次启动任务前。指定延迟时间
- **异步任务**: 支持直接启动异步任务并回调传递数据
- **线程切换**: 支持指定回调方法所在的线程。默认为运行于UI线程中

## 用法

### 创建配置EasyExecutor实例

```
val executor =
// size为所需创建的线程池的大小。当size <= 0时。
// 表示需要使用newCachedThreadPool。
EasyExecutor.newBuilder(size)
.setName(name)// 默认的线程名
.setPriority(priority)// 线程池中创建线程的优先级
.onStart {threadName -> } // 默认任务启动时的回调
.onSuccess {threadName -> }// 默认任务执行完毕后的回调
.onError {threadName, throwable -> }// 默认任务执行出现异常时的回调
.setDeliver(deliver)// 默认的回调任务派发器。用于将信息派发到指定线程去。
.build()// 最后。执行创建
```

### 启动普通任务

```
executor.execute(runnable:Runnable)
```

### 启动异步任务

```
executor.async(task:Callable<T>, result:(T)->Unit)
```

### 延时启动任务

```
executor.setDelay(time)// 单位为毫秒,在启动任务前调用即可
.execute(runnable:Runnable)
```

### 设置当前执行任务名

```
executor.setName(name)// 只针对当前此的任务进行任务名重置
```

### 设置当前执行回调任务

```
// 只被当前次的任务所触发。且不拦截创建时指定的默认回调
executor.onStart {threadName -> }
.onSuccess {threadName -> }
.onError {threadName, throwable -> }
```


Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,17 @@ class EasyExecutor private constructor(val executor: ExecutorService,
private val builder: Builder) {

private var delay:Long = 0
private var name:String? = null
private var success:SUCCESS? = null
private var error:ERROR? = null
private var start:START? = null
private var deliver:Executor? = null

fun setName(name:String):EasyExecutor {
this.name = name
return this
}

fun setDelay(delay:Long):EasyExecutor {
this.delay = Math.max(delay, 0)
return this
Expand Down Expand Up @@ -180,16 +186,17 @@ class EasyExecutor private constructor(val executor: ExecutorService,
private var success:SUCCESS? = executor.success
private var error:ERROR? = executor.error
private var start:START? = executor.start
private var name:String = executor.name?:builder.name

override fun run() {
val name = Thread.currentThread().name
Thread.currentThread().setUncaughtExceptionHandler {
_, e ->
deliver.execute {
builder.error?.invoke(name, e)
error?.invoke(name, e)
}
}
Thread.currentThread().name = name
deliver.execute {
builder.start?.invoke(name)
start?.invoke(name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ import java.util.*
*/
object ActivityStack {
private var application: Application? = null
val stack:LinkedList<Activity> = LinkedList()

private val stack:LinkedList<Activity> = LinkedList()

/**
* 获取顶层Activity实例
Expand All @@ -34,18 +35,21 @@ object ActivityStack {
application?.registerActivityLifecycleCallbacks(Callback())
}

@Synchronized
fun push(activity: Activity) {
if (!stack.contains(activity)) {
stack.addLast(activity)
}
}

@Synchronized
fun pop(activity: Activity) {
if (stack.contains(activity)) {
stack.remove(activity)
}
}

@Synchronized
fun pop() {
if (!stack.isEmpty()) {
val pop = stack.pop()
Expand Down

0 comments on commit 8c230c5

Please sign in to comment.