Skip to content

Commit 574a514

Browse files
committed
feat: 初步完成本框架的功能
1 parent d943eb0 commit 574a514

16 files changed

Lines changed: 704 additions & 66 deletions

File tree

app/src/main/java/com/fee/start/MyApp.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
import android.app.Application;
44

5+
import com.fee.start.tasks.Task1;
6+
import com.fee.start.tasks.Task2;
7+
import com.fee.start.tasks.Task3;
8+
import com.fee.start.tasks.Task4;
9+
import com.fee.start.tasks.Task5;
10+
import com.github.androidstartup.StartupTasksManager;
11+
import com.github.androidstartup.StartupTasksOrganizer;
12+
513
/**
614
* *****************(^_^)***********************<br>
715
* User: fee(QQ/WeiXin:1176610771)<br>
@@ -13,5 +21,26 @@
1321
* ******************(^_^)***********************
1422
*/
1523
public class MyApp extends Application {
24+
@Override
25+
public void onCreate() {
26+
super.onCreate();
27+
StartupTasksManager.Builder
28+
.addTask(new Task1())
29+
.addTask(new Task5())
30+
.addTask(new Task3())
31+
.addTask(new Task2())
32+
.addTask(new Task4())
33+
.startUp();
34+
35+
new StartupTasksOrganizer.TasksBuilder()
36+
.addTask(new Task1())
37+
.addTask(new Task5())
38+
.addTask(new Task3())
39+
.addTask(new Task2())
40+
.addTask(new Task4())
41+
.build(this)
42+
.startUp();
43+
1644

45+
}
1746
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.fee.start.tasks
2+
3+
import android.content.Context
4+
import com.github.androidstartup.AStartupTask
5+
import java.util.concurrent.Executor
6+
7+
/**
8+
******************(^_^)***********************<br>
9+
* Author: fee(QQ/WeiXin:1176610771)<br>
10+
* Date: 2023/3/11<br>
11+
* Time: 22:15<br>
12+
* <P>DESC:
13+
*
14+
* </p>
15+
* ******************(^_^)***********************
16+
*/
17+
class Task1: AStartupTask<String>() {
18+
19+
override fun doStartupTask(context: Context): String {
20+
return "task1 result"
21+
}
22+
23+
/**
24+
* 标识启动任务是否依赖主线程的执行
25+
*/
26+
override fun isDependonMainThread(): Boolean {
27+
return true
28+
}
29+
30+
/**
31+
* 启动任务所依赖的任务 执行器 [Executor]
32+
*/
33+
override fun dependonTaskExecutor(): Executor? {
34+
return null
35+
}
36+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.fee.start.tasks
2+
3+
import android.content.Context
4+
import com.github.androidstartup.AStartupTask
5+
import com.github.androidstartup.IStartupTask
6+
7+
/**
8+
******************(^_^)***********************<br>
9+
* Author: fee(QQ/WeiXin:1176610771)<br>
10+
* Date: 2023/3/11<br>
11+
* Time: 22:20<br>
12+
* <P>DESC:
13+
*
14+
* </p>
15+
* ******************(^_^)***********************
16+
*/
17+
class Task2: AStartupTask<Int>() {
18+
/**
19+
* 执行任务
20+
* @return [T] 执行了启动任务可能的 返回数据
21+
*/
22+
override fun doStartupTask(context: Context): Int {
23+
24+
return 0
25+
}
26+
27+
override fun dependentTask(): List<Class<out IStartupTask<*>>>? {
28+
return listOf(Task1::class.java)
29+
}
30+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.fee.start.tasks
2+
3+
import android.content.Context
4+
import com.github.androidstartup.AStartupTask
5+
import com.github.androidstartup.IStartupTask
6+
7+
/**
8+
******************(^_^)***********************<br>
9+
* Author: fee(QQ/WeiXin:1176610771)<br>
10+
* Date: 2023/3/11<br>
11+
* Time: 22:20<br>
12+
* <P>DESC:
13+
*
14+
* </p>
15+
* ******************(^_^)***********************
16+
*/
17+
class Task3: AStartupTask<Int>() {
18+
/**
19+
* 执行任务
20+
* @return [T] 执行了启动任务可能的 返回数据
21+
*/
22+
override fun doStartupTask(context: Context): Int {
23+
24+
return 0
25+
}
26+
27+
override fun dependentTask(): List<Class<out IStartupTask<*>>>? {
28+
return listOf(Task1::class.java)
29+
}
30+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.fee.start.tasks
2+
3+
import android.content.Context
4+
import com.github.androidstartup.AStartupTask
5+
import com.github.androidstartup.IStartupTask
6+
7+
/**
8+
******************(^_^)***********************<br>
9+
* Author: fee(QQ/WeiXin:1176610771)<br>
10+
* Date: 2023/3/11<br>
11+
* Time: 22:20<br>
12+
* <P>DESC:
13+
*
14+
* </p>
15+
* ******************(^_^)***********************
16+
*/
17+
class Task4: AStartupTask<Int>() {
18+
/**
19+
* 执行任务
20+
* @return [T] 执行了启动任务可能的 返回数据
21+
*/
22+
override fun doStartupTask(context: Context): Int {
23+
24+
return 0
25+
}
26+
27+
override fun dependentTask(): List<Class<out IStartupTask<*>>>? {
28+
return listOf(Task1::class.java)
29+
}
30+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.fee.start.tasks
2+
3+
import android.content.Context
4+
import com.github.androidstartup.AStartupTask
5+
import com.github.androidstartup.IStartupTask
6+
7+
/**
8+
******************(^_^)***********************<br>
9+
* Author: fee(QQ/WeiXin:1176610771)<br>
10+
* Date: 2023/3/11<br>
11+
* Time: 22:20<br>
12+
* <P>DESC:
13+
*
14+
* </p>
15+
* ******************(^_^)***********************
16+
*/
17+
class Task5: AStartupTask<Int>() {
18+
/**
19+
* 执行任务
20+
* @return [T] 执行了启动任务可能的 返回数据
21+
*/
22+
override fun doStartupTask(context: Context): Int {
23+
24+
return 0
25+
}
26+
27+
override fun dependentTask(): List<Class<out IStartupTask<*>>>? {
28+
return listOf(Task1::class.java)
29+
}
30+
}

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
plugins {
33
id 'com.android.application' version '7.4.2' apply false
44
id 'com.android.library' version '7.4.2' apply false
5-
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
5+
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
66
}
77

88
task clean(type: Delete) {
Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,72 @@
11
package com.github.androidstartup
22

3+
import java.util.concurrent.CountDownLatch
4+
35
/**
46
******************(^_^)***********************<br>
57
* User: fee(QQ/WeiXin:1176610771)<br>
68
* Date: 2022/11/13<br>
79
* Time: 20:14<br>
810
* <P>DESC:
9-
*
11+
* 启动任务接口的抽象实现基类
1012
* </p>
1113
* ******************(^_^)***********************
1214
*/
1315
abstract class AStartupTask<T>: IStartupTask<T> {
16+
protected val mTag: String by lazy(LazyThreadSafetyMode.NONE) {
17+
javaClass.simpleName
18+
}
19+
20+
/**
21+
* 本启动任务所依赖的上游任务在完成后的 CountDown,当所有依赖的上游任务都完成后才通知本任务执行
22+
*/
23+
protected val mDependentTaskCountDown by lazy(LazyThreadSafetyMode.NONE){
24+
CountDownLatch(getDependentTaskCount())
25+
}
26+
1427
/**
15-
* 本启动任务所依赖的其他 task的数量
28+
* 本启动任务所依赖的其他启动任务的数量
29+
* 之所以增加这个属性,避免在调用[getDependentTaskCount]时每次都去调用[dependentTask]
30+
* 重复生成 List<>
31+
* def = -1,子类可以赋值,本父类默认会调用[dependentTask] 来查询一次
1632
*/
17-
override var dependenceTaskCount: Int
18-
get() = dependentTask()?.size ?: 0
19-
set(value) {}
33+
protected var mDependentTaskCount = -1
34+
35+
/**
36+
* 本启动任务所依赖的其他 task的数量,本任务所依赖的其他任务数量小于1时(即没有依赖其他任务)则优先执行
37+
*/
38+
override fun getDependentTaskCount(): Int {
39+
if (mDependentTaskCount == -1) {
40+
mDependentTaskCount = dependentTask()?.size ?: 0
41+
}
42+
return mDependentTaskCount
43+
}
2044

2145
/**
2246
* 本启动任务所依赖的其他启动任务的 Class数据集
2347
* 作用为:在本启动任务执行前,需要在所依赖其他任务执行完后再执行
2448
*/
25-
override fun dependentTask(): List<Class<in IStartupTask<*>>>? {
49+
override fun dependentTask(): List<Class<out IStartupTask<*>>>? {
2650
return null
2751
}
52+
53+
//----------------
54+
/**
55+
* 标记当前启动任务先等一等
56+
*/
57+
override fun letHoldOn() {
58+
try {
59+
mDependentTaskCountDown.await()
60+
}catch (ex: InterruptedException){
61+
ex.printStackTrace()
62+
}
63+
}
64+
65+
/**
66+
* 当当前任务的上游任务完成时通知当前任务将可以执行、动作
67+
*/
68+
override fun letWillAction() {
69+
mDependentTaskCountDown.countDown()
70+
}
71+
//----------------
2872
}

theAndroidStartup/src/main/java/com/github/androidstartup/IStartupTask.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import android.content.Context
1212
* </p>
1313
* ******************(^_^)***********************
1414
*/
15-
interface IStartupTask<T> {
15+
interface IStartupTask<T> : ITaskStateIndicate{
1616

1717
/**
1818
* 执行任务
@@ -21,16 +21,16 @@ interface IStartupTask<T> {
2121
fun doStartupTask(context: Context): T
2222

2323
/**
24-
* 本启动任务所依赖的其他 task的数量
24+
* 本启动任务所依赖的其他 task的数量,本任务所依赖的其他任务数量小于1时(即没有依赖其他任务)则优先执行
2525
*/
26-
var dependenceTaskCount: Int
26+
fun getDependentTaskCount(): Int
2727

2828

2929
/**
3030
* 本启动任务所依赖的其他启动任务的 Class数据集
3131
* 作用为:在本启动任务执行前,需要在所依赖其他任务执行完后再执行
3232
*/
33-
fun dependentTask(): List<Class<in IStartupTask<*>>>?
33+
fun dependentTask(): List<Class<out IStartupTask<*>>>?
3434

3535

3636
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.github.androidstartup
2+
3+
/**
4+
******************(^_^)***********************<br>
5+
* Author: fee(QQ/WeiXin:1176610771)<br>
6+
* Date: 2023/3/12<br>
7+
* Time: 18:41<br>
8+
* <P>DESC:
9+
* 任务执行的监听者
10+
* </p>
11+
* ******************(^_^)***********************
12+
*/
13+
internal interface ITaskListener {
14+
/**
15+
* 启动任务开始执行
16+
* @param theTask 当前正在执行的启动任务
17+
*/
18+
fun onTaskStart(theTask: IStartupTask<*>)
19+
20+
/**
21+
* 启动任务执行、工作结束
22+
* @param theTask 当前正在执行的启动任务
23+
* @param result 执行的结果
24+
*/
25+
fun onTaskDone(theTask: IStartupTask<*>, result: Any?)
26+
27+
}

0 commit comments

Comments
 (0)