Android 启动框架 EasyLaunch

EasyLaunch

这是一个Android的启动开源框架, 用于在启动过程中将任务并行, 达到优化启动速度的目的.

GitHub地址: github.com/aidaole/Eas...

框架特点:

  1. 使用有向无环图配置任务依赖关系, 并支持检查当前任务是否成环
  2. 支持main线程, 子线程同步初始化
  3. 使用协程实现, 轻量级
  4. 支持任务依赖的延迟解析,可以任意顺序添加任务
  5. 支持任务完成监听,可以在特定任务完成后执行特定操作

执行效果

如项目中app的配置方案执行: TaskA (执行递归fibonacci(40)模拟阻塞耗时操作), 异步, 无依赖 TaskB (执行Thread.sleep(300)), 异步, 无依赖 TaskC (执行delay(200)), 异步, 依赖B TaskD (执行delay(100)), 同步主线程, 依赖 A, C

可以看到日志后方总结: 所有任务总时长是 1343, 但是实际执行时长是 1051. 因为任务 A,B 时并行执行的

logcatfilter 复制代码
启动任务已添加并开始执行
Application.onCreate() 继续执行
开始执行启动任务
开始执行任务: TaskA
开始执行任务: TaskB
TaskA 开始执行
TaskB 开始执行
任务执行完成: TaskB, 执行时长: 302ms, 开始总时长: 310ms
MainActivity onCreate: 
任务执行完成: TaskA, 执行时长: 739ms, 开始总时长: 746ms
开始执行任务: TaskC
TaskC 开始执行
任务执行完成: TaskC, 执行时长: 201ms, 开始总时长: 948ms
开始执行任务: TaskD
TaskD 开始执行(主线程)
任务执行完成: TaskD, 执行时长: 101ms, 开始总时长: 1050ms
======== 任务执行时间统计 ========
所有任务合并执行时长: 1051ms
所有任务总时长: 1343ms
各任务执行时间:
1. TaskA: 739ms (55.0%)
2. TaskB: 302ms (22.5%)
3. TaskC: 201ms (15.0%)
4. TaskD: 101ms (7.5%)
================================
所有启动任务执行完成

使用方法

1. 添加依赖

在项目的根目录的build.gradle中添加JitPack仓库:

groovy 复制代码
allprojects {
    repositories {
        // ...
        maven { url 'https://jitpack.io' }
    }
}

在应用模块的build.gradle中添加依赖:

groovy 复制代码
dependencies {
    implementation 'com.github.aidaole:EasyLaunch:[最新版本]'
}

2. 创建启动任务

创建启动任务需要实现Task接口:

kotlin 复制代码
class YourTask : Task {
    // 任务名称
    override val name: String
        get() = "YourTask"
    
    // 任务依赖,表示当前任务依赖的其他任务
    override val dependencies: List<Class<out Task>>
        get() = listOf(OtherTask::class.java)
    
    // 是否是异步任务
    override val isAsync: Boolean
        get() = true
    
    // 任务执行方法
    override suspend fun execute() {
        // 在此处实现任务的具体逻辑
    }
}

3. 在Application中初始化

在Application的onCreate方法中初始化EasyLaunch:

kotlin 复制代码
class YourApplication : Application() {
    
    override fun onCreate() {
        super.onCreate()
        
        // 初始化EasyLaunch
        EasyLaunch.getInstance().init(this)
        
        // 添加任务 - 可以任意顺序添加
        EasyLaunch.getInstance()
            .addTask(TaskD()) // 依赖TaskB和TaskC
            .addTask(TaskB()) // 依赖TaskA
            .addTask(TaskC()) // 依赖TaskA
            .addTask(TaskA()) // 没有依赖
            .start()
    }
}

4. 等待任务完成

如果需要等待某些任务完成后再执行某些操作,可以使用任务完成监听:

kotlin 复制代码
// 监听单个任务完成
EasyLaunch.getInstance()
    .addTaskCompletedListener(TaskB::class.java) {
        // 当TaskB完成时执行
        Log.d("Sample", "TaskB已完成,可以执行特定操作")
    }
    .start()

// 监听多个任务完成
EasyLaunch.getInstance()
    .addTasksCompletedListener(listOf(TaskB::class.java, TaskC::class.java)) {
        // 当TaskB和TaskC都完成时执行
        Log.d("Sample", "TaskB和TaskC都已完成,可以执行特定操作")
    }
    .start()

// 监听所有任务完成
EasyLaunch.getInstance()
    .addAllTasksCompletedListener {
        // 当所有任务完成时执行
        Log.d("Sample", "所有任务已完成,可以跳转到主界面")
        startActivity(Intent(this, MainActivity::class.java))
        finish()
    }
    .start()
相关推荐
移动开发者1号2 小时前
使用 Android App Bundle 极致压缩应用体积
android·kotlin
移动开发者1号2 小时前
构建高可用线上性能监控体系:从原理到实战
android·kotlin
ii_best7 小时前
按键精灵支持安卓14、15系统,兼容64位环境开发辅助工具
android
美狐美颜sdk7 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
DeepSeek-大模型系统教程7 小时前
推荐 7 个本周 yyds 的 GitHub 项目。
人工智能·ai·语言模型·大模型·github·ai大模型·大模型学习
ai小鬼头10 小时前
AIStarter最新版怎么卸载AI项目?一键删除操作指南(附路径设置技巧)
前端·后端·github
程序员岳焱11 小时前
Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
后端·mysql·性能优化
恋猫de小郭12 小时前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin
aqi0012 小时前
FFmpeg开发笔记(七十七)Android的开源音视频剪辑框架RxFFmpeg
android·ffmpeg·音视频·流媒体
androidwork14 小时前
深入解析内存抖动:定位与修复实战(Kotlin版)
android·kotlin