面向Android开发者的Dart学习教程

Thread.sleep(300)

} catch (e: Exception) {

}

LogUtils.i(

TAG, "AnchorTaskOne: " + (System.currentTimeMillis() - start)

)

}

}

复制代码

如果任务 三 依赖任务 二,任务 一,可以这样写

addTask(TASK_NAME_THREE).afterTask(TASK_NAME_ZERO, TASK_NAME_ONE)

复制代码

最后,通过 project.start() 方法启动, 如果需要阻塞等待,调用 await() 方法

AnchorProject.Builder().setContext(context).setLogLevel(LogUtils.LogLevel.DEBUG)

.setAnchorTaskCreator(ApplicationAnchorTaskCreator())

.addTask(TASK_NAME_ZERO)

.addTask(TASK_NAME_ONE)

.addTask(TASK_NAME_TWO)

.addTask(TASK_NAME_THREE).afterTask(TASK_NAME_ZERO, TASK_NAME_ONE)

.addTask(TASK_NAME_FOUR).afterTask(TASK_NAME_ONE, TASK_NAME_TWO)

.addTask(TASK_NAME_FIVE).afterTask(TASK_NAME_THREE, TASK_NAME_FOUR)

.build()

project.start().await()

复制代码

监听任务回调

project.addListener(object : OnProjectExecuteListener {

// project 开始执行的时候

override fun onProjectStart() {

com.xj.anchortask.LogUtils.i(MyApplication.TAG, "onProjectStart ")

}

// project 执行一个 task 完成的时候

override fun onTaskFinish(taskName: String) {

com.xj.anchortask.LogUtils.i(

MyApplication.TAG,

“onTaskFinish, taskName is $taskName”

)

}

// project 执行完成的时候

override fun onProjectFinish() {

com.xj.anchortask.LogUtils.i(MyApplication.TAG, "onProjectFinish ")

}

})

复制代码

添加每个任务执行耗时回调

project.onGetMonitorRecordCallback = object : OnGetMonitorRecordCallback {

// 所有 task 执行完毕会调用这个方法,Map 存储了 task 的执行时间, key 是 taskName,value 是时间,单位毫秒

override fun onGetTaskExecuteRecord(result: Map<String?, Long?>?) {

onGetMonitorRecordCallback?.onGetTaskExecuteRecord(result)

}

// 所有 task 执行完毕会调用这个方法,costTime 执行时间

override fun onGetProjectExecuteTime(costTime: Long) {

onGetMonitorRecordCallback?.onGetProjectExecuteTime(costTime)

}

}

复制代码

AnchorProject 介绍


  1. AnchorTaskDispatcher start 方法必须在主线程调用,子线程调用会抛出异常。

  2. await 阻塞当前线程,等待所有任务执行完毕之后,会自动往下走,await 方法携带一个参数,timeOutMillion 表示超时等待的时间

  3. await() 方法必须在 start 方法之后调用

  4. 添加任务是通过 AnchorProject.Builder().addTask 添加的,典型的构造模式

  5. 设置执行的线程池,可以通过 AnchorProject.Builder().setThreadPoolExecutor(TaskExecutorManager.instance.cpuThreadPoolExecutor)

AnchorTask 介绍


AnchorTask 实现了 IAnchorTask 接口,主要有几个方法

  • isRunOnMainThread(): Boolean表示是否在主线程运行,默认值是 false

  • priority(): Int 方法 表示线程的优先级别,默认值是 Process.THREAD_PRIORITY_FOREGROUND

  • needWait() 表示当我们调用 AnchorTaskDispatcher await 时,是否需要等待,return true,表示需要等待改任务执行结束,AnchorTaskDispatcher await 方法才能继续往下执行。

  • fun run() 方法,表示任务执行的时候

interface IAnchorTask : IAnchorCallBack {

/**

  • 是否在主线程执行

*/

fun isRunOnMainThread(): Boolean

/**

  • 任务优先级别

*/

@IntRange(

from = Process.THREAD_PRIORITY_FOREGROUND.toLong(),

to = Process.THREAD_PRIORITY_LOWEST.toLong()

)

fun priority(): Int

/**

  • 调用 await 方法,是否需要等待改任务执行完成

  • true 不需要

  • false 需要

*/

fun needWait(): Boolean

/**

  • 任务被执行的时候回调

*/

fun run()

}

复制代码

class AnchorTaskOne : AnchorTask() {

override fun isRunOnMainThread(): Boolean {

return false

}

override fun run() {

val start = System.currentTimeMillis()

try {

Thread.sleep(300)

} catch (e: Exception) {

}

LogUtils.i(

TAG, "AnchorTaskOne: " + (System.currentTimeMillis() - start)

)

}

}

复制代码

监听任务的回调

val anchorTask = AnchorTaskTwo()

anchorTask.addCallback(object : IAnchorCallBack {

override fun onAdd() {

com.xj.anchortask.LogUtils.i(TAG, “onAdd: $anchorTask”)

}

override fun onStart() {

com.xj.anchortask.LogUtils.i(TAG, "onStart:$anchorTask ")

}

override fun onFinish() {

com.xj.anchortask.LogUtils.i(TAG, "onFinish:$anchorTask ")

}

})

复制代码

总结


AnchorTask 的原理不复杂,本质是有向无环图与多线程知识的结合。

最后

给大家送上我成功跳槽复习中所整理的资料,由于文章篇幅有限,所以只是把题目列出来了

image

image

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

链图片转存中…(img-Jop7245o-1714721174158)]

[外链图片转存中…(img-KTSq5TLu-1714721174159)]

[外链图片转存中…(img-l0jLNtYo-1714721174159)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Dart三端一体化开发是指使用Dart编程语言进行跨平台开发,可以同时为Web、移动端和桌面端开发应用程序。 首先,Dart是一种高性能、可嵌入式的编程语言,可以用于开发Web应用、移动应用和桌面应用。Dart具有良好的可读性和可维护性,通过使用Dart语言进行三端开发,可以减少开发成本和时间。 其次,Dart有丰富的工具和框架支持。最常用的框架是Flutter,它是一个用于开发跨平台移动应用和桌面应用的UI框架。Flutter的热重载功能使得开发过程更加高效,开发者可以即时看到界面的变化。此外,Flutter还提供了丰富的组件和界面风格,使得开发出的应用具有良好的用户体验。 最后,Dart三端一体化开发具有良好的兼容性。Dart编译器将Dart代码编译为JavaScript代码,使得Dart应用可以在各种Web浏览器上运行。同时,通过Flutter的跨平台特性,开发者只需编写一套代码,即可在Android、iOS和桌面操作系统上运行应用程序。 总之,Dart三端一体化开发通过使用Dart语言和相关工具,可以实现在Web、移动端和桌面端的跨平台开发,大大提高了开发效率和代码的可复用性,是一种非常便捷和高效的开发方式。 ### 回答2: Dart三端一体化开发是指使用Dart语言进行跨平台应用程序开发的一种方法。它可以同时在Android、iOS和Web平台上运行,极大地提高了开发者的效率和代码的复用性。 Dart是一种由Google开发面向对象的编程语言,它具有简洁灵活、易于学习和理解的特点。可以使用Dart编写应用程序的核心逻辑,并且可以通过Dart框架来实现UI界面的构建和管理。根据Dart的特性,我们可以将应用程序的逻辑和界面组件进行有效的分离和封装,从而实现三端一体化的开发。 使用Dart三端一体化开发可以大大减少重复代码的编写量。开发者只需要编写一套逻辑代码,然后根据不同平台的要求,编写相应的界面代码。通过使用Dart的跨平台框架,这些界面代码可以在不同平台上进行复用,从而减少了重复开发的工作量。 此外,Dart三端一体化开发还能够降低项目的维护成本。由于采用了统一的开发语言和框架,开发者可以更加方便地进行项目的维护和升级。当应用程序需要更新时,只需要针对逻辑代码进行修改,而不需要改动各个平台上的界面代码,从而极大地加快了项目的开发周期。 总之,Dart三端一体化开发是一种高效、灵活和可维护的开发方法。它能够充分利用Dart语言的特点,实现跨平台应用的开发与维护,提高开发者的生产效率和代码的复用性。未来,Dart三端一体化开发有望成为移动应用开发的主流趋势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值