Android经典实战之处理后台任务的2个工具

简介: 本文介绍Android后台任务管理,涵盖WorkManager与JobScheduler的使用方法及区别。WorkManager属Jetpack库,确保任务可靠执行,支持延迟与条件依赖。JobScheduler则针对特定条件下的任务调度,如网络类型。两者各有优势,WorkManager适用于多数场景。

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

什么是后台任务

在 Android 应用中,后台任务是指那些在不需要用户交互的情况下执行的任务。这些任务可能包括数据同步、文件上传、用户活动记录等。为确保这些任务在各种条件下可靠地执行,Android 提供了一些工具和API,比如 WorkManagerJobScheduler

WorkManager

WorkManager 是 Android Jetpack 库的一部分,用于管理和调度后台任务。它支持延迟执行、运行条件、以及任务之间的复杂依赖关系。其优势在于能够在各种情况下运行,包括应用被杀死、设备重启等。

使用 WorkManager 的步骤:

1、 添加依赖
build.gradle 中添加 WorkManager 依赖:

   implementation "androidx.work:work-runtime-ktx:2.7.1"

2、 定义 Worker
创建一个继承 Worker 的类,并在 doWork 方法内执行你的后台任务。

   import android.content.Context
   import androidx.work.Worker
   import androidx.work.WorkerParameters

   class MyWorker(context: Context, workerParams: WorkerParameters) :
       Worker(context, workerParams) {

       override fun doWork(): Result {
           // 执行你的后台任务
           return Result.success()
       }
   }

3、 调度任务
使用 WorkManager 来调度刚才定义的 Worker。

   import androidx.work.OneTimeWorkRequestBuilder
   import androidx.work.WorkManager

   val workRequest = OneTimeWorkRequestBuilder<MyWorker>().build()
   WorkManager.getInstance(context).enqueue(workRequest)

JobScheduler

JobScheduler 是专门用来调度需要在一定条件(例如插入电源、连接WiFi)下执行的任务的 API。它从 Android 5.0(API 21)开始引入。

使用 JobScheduler 的步骤:

1、 创建 JobService
定义一个继承 JobService 的类,并在 onStartJob 方法中执行后台任务。

   import android.app.job.JobParameters
   import android.app.job.JobService
   import android.util.Log

   class MyJobService : JobService() {
       override fun onStartJob(params: JobParameters?): Boolean {
           // 执行你的后台任务
           Log.d("MyJobService", "Job started.")
           // 返回true表示任务仍然在执行中
           return true
       }

       override fun onStopJob(params: JobParameters?): Boolean {
           // 停止任务
           Log.d("MyJobService", "Job stopped.")
           // 返回true表示希望系统重新调度这个任务
           return true
       }
   }

2、 注册 JobService
AndroidManifest.xml 中注册你的 JobService

   <service
       android:name=".MyJobService"
       android:permission="android.permission.BIND_JOB_SERVICE" />

3、 调度任务
使用 JobScheduler API 来调度你的 JobService

   import android.app.job.JobInfo
   import android.app.job.JobScheduler
   import android.content.ComponentName
   import android.content.Context

   val componentName = ComponentName(context, MyJobService::class.java)
   val jobInfo = JobInfo.Builder(123, componentName)
       .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
       .setPersisted(true)
       .setPeriodic(15 * 60 * 1000L) // 15分钟周期
       .build()

   val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
   jobScheduler.schedule(jobInfo)

WorkManager vs JobScheduler

  • WorkManager 更适合需要确保执行的任务,并且支持多种触发条件(比如网络状态、电量等)。
  • JobScheduler 更适合于特定条件下执行的任务,比如仅在WiFi连接时同步数据。

在功能和简便性方面,WorkManager 通常是更强大和更推荐的选择,尤其对于较新的项目。


欢迎关注我的公众号AntDream查看更多精彩文章!

目录
相关文章
|
6月前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
235 3
|
5月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
915 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
758 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
960 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
220 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
6月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
477 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
6月前
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
436 4
|
6月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
544 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
6月前
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
177 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
5月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
285 0