总结
写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于Flutter的学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的
还有高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
4 }
5
6 override fun run() {
7 val start = System.currentTimeMillis()
8 try {
9 // 在这里进行操作,这里通过睡眠模拟耗时操作
10 Thread.sleep(300)
11 } catch (e: Exception) {
12 }
13 com.xj.anchortask.library.log.LogUtils.i(
14 TAG, "AnchorTaskOne: " + (System.currentTimeMillis() - start)
15 )
16 }
17
18 // 返回依赖的任务,这里是通过 class name 去找到对应的 task
19 override fun getDependsTaskList(): List<Class>? {
20 return ArrayList<Class>().apply {
21 add(AnchorTaskA::class.java)
22 }
23 }
24
25}
如果任务 C 依赖任务 B,任务 A,可以这样写
1class AnchorTaskC : AnchorTask() {
2
3 override fun getDependsTaskList(): List<Class>? {
4 return ArrayList<Class>().apply {
5 add(AnchorTaskA::class.java)
6 add(AnchorTaskB::class.java)
7 }
8 }
9
10}
最后,通过 AnchorTaskDispatcher.instance .addTask(AnchorTaskFive())
添加任务,并调用 start() 方法启动, await() 方法表示阻塞等待所有任务执行完毕。
1AnchorTaskDispatcher.instance.setContext(this).setLogLevel(LogUtils.LogLevel.DEBUG).setTimeOutMillion(1000L).
2 .addTask(AnchorTaskZero())
3 .addTask(AnchorTaskOne())
4 .addTask(AnchorTaskTwo())
5 .addTask(AnchorTaskThree())
6 .addTask(AnchorTaskFour())
7 .addTask(AnchorTaskFive())
8 .start()
9 .await()
AnchorTaskDispatcher 介绍
-
AnchorTaskDispatcher start
方法必须在主线程调用,子线程调用会抛出异常。 -
setTimeOutMillion
方法是配合 await() 方法使用的,单独调用没有任何效果,表示 await 等待的超时时间 -
await
阻塞当前线程,等待所有任务执行完毕之后,会自动往下走 -
await()
方法必须在 start 方法之后调用 -
setThreadPoolExecutor
设置 task 执行的线程池
AnchorTask 介绍
AnchorTask 实现了 IAnchorTask 接口,主要有几个方法
-
isRunOnMainThread(): Boolean
表示是否在主线程运行,默认值是 false -
priority(): Int
方法 表示线程的优先级别,默认值是 Process.THREAD_PRIORITY_FOREGROUND -
needWait()
表示当我们调用AnchorTaskDispatcher await
时,是否需要等待,return true,表示需要等待改任务执行结束,AnchorTaskDispatcher await
方法才能继续往下执行。 -
fun getDependsTaskList(): List<class>?</class
方法返回前置任务依赖,默认值是返回 null. -
fun run()
方法,表示任务执行的时候
1interface IAnchorTask : IAnchorCallBack {
2
3 /**
4 * 是否在主线程执行
5 */
6 fun isRunOnMainThread(): Boolean
7
8 /**
9 * 任务优先级别
10 */
11 @IntRange(
12 from = Process.THREAD_PRIORITY_FOREGROUND.toLong(),
13 to = Process.THREAD_PRIORITY_LOWEST.toLong()
14 )
15 fun priority(): Int
16
17 /**
18 * 调用 await 方法,是否需要等待改任务执行完成
19 * true 不需要
20 * false 需要
21 */
22 fun needWait(): Boolean
23
24 /**
25 * 当前任务的前置任务,可以用来确定顶点的入度
26 */
27 fun getDependsTaskList(): List<Class>?
28
29 /**
30 * 任务被执行的时候回调
31 */
32 fun run()
33
34}
1class AnchorTaskOne : AnchorTask() {
2 override fun isRunOnMainThread(): Boolean {
最后
愿你有一天,真爱自己,善待自己。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
n {
最后
愿你有一天,真爱自己,善待自己。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!