文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Kotlin + Flow 实现Android 应用初始化任务启动库

2024-04-02 19:55

关注

特性

Kotlin + Flow 实现的 Android 应用初始化任务启动库。

引入依赖

项目地址:github.com/czy1121/ini…


repositories { 
  maven { url "https://gitee.com/ezy/repo/raw/android_public/"}
} 
dependencies {
  implementation "me.reezy.init:init:0.9.0" 
  kapt "me.reezy.init:init-compiler:0.9.0" 

  // 使用 init-startup 代替 init 可以利用 Jetpack Startup 库自动初始化
  // 无需在 Application.onCreate 调用 InitManager.init()
  implementation "me.reezy.init:init-startup:0.9.0" 
}

使用

在 AndroidManifest.xml 的 <application> 里添加模块


<meta-data android:name="modules" android:value="app" />

通过注解 @Init 和 InitTask 接口定义一个任务


@Init
class OneInit : InitTask {
  override fun execute(app: Application) {
    Log.e(TAG, "this is ${javaClass.simpleName} in ${Thread.currentThread().name}")
  }
}

通过注解 @Init 的参数配置任务信息


@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.SOURCE)
annotation class Init(
  val process: String = "all",    // 指定工作进程名称,main 表示仅在主进程运行,all 表示在所有进程运行
  val background: Boolean = false,  // 是否在工作线程执行任务
  val debugOnly: Boolean = false,   // 是否仅在 DEBUG 模式执行任务
  val compliance: Boolean = false,  // 是否需要合规执行
  val depends: Array<String> = [],  // 依赖的任务列表
  val priority: Short = 0       // 
)

APT会按模块收集任务信息并生成任务加载器(InitLoader_$moduleName),任务加载器用于添加任务到TaskList


class Task(
  val name: String,          // APT收集的任务名称格式为 "$moduleName:${clazz.simpleName}"
  val background: Boolean = false,  // 是否在工作线程执行任务
  val priority: Int = 0,       // 进程运行的优先级,值小的先执行
  val depends: Set<String> = setOf(), // 依赖的任务列表,同模块只需指定"${clazz.simpleName}",跨模块需要指定 "$moduleName:${clazz.simpleName}"
  val block: () -> Unit = {},     // 待执行的任务
) {
  val children: MutableSet<Task> = mutableSetOf() // 子任务列表
}

核心类

无依赖的异步任务,在子线程并行执行
无依赖的同步任务,在主线程顺序执行
有依赖的任务,确保无循环依赖,且被依赖的任务先执行

可以不使用 InitManager 收集任务


val taskList = TaskList(app).apply {
  add("task1") { 
  }  
  add("task2", depends = setOf("t1")) { 
  }  
  add("task3", depends = setOf("task1")) { 
  }  
}

val manager = TaskManager(taskList, setOf("t1"))
manager.start()

// ...

// 完成开关任务t1
manager.trigger("t1")

以上就是Kotlin + Flow 实现Android 应用初始化任务启动库的详细内容,更多关于实现Android 应用初始化任务启动库的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯