首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android WorkManager浅谈

WorkManager根据设备API级别和应用程序状态等因素来选择适当方式运行任务。如果WorkManager应用程序运行时执行你任务,它会在应用程序进程新线程中执行。...如果因为某种原因工作没抢占,相同Worker实例不会被重用。即每个Worker实例只会调用一次doWork()方法,如果需要重新运行工作单元,需要创建新Worker。...但是,你还可以给WorkRequest添加详细信息,比如任务运行时环境。每个WorkRequest有一个自动生成唯一ID,你可以使用ID来取消排队任务或获取任务状态。...(); mFuture.set(result); } }); return mFuture; } 可见,调用doWork()后,任务执行完调用了set方法,此时会回addListener方法。...addListener回中主要用来判断当前任务状态,所以如果任务停止,此处展示捕获异常信息。 比如调用一个任务cancel方法,会展示下面的信息。

1.1K40

现代 WorkManager API 已发布

多进程 API 由于使用了多进程库处理工作,WorkManager 引入了新 API,并进行了底层优化来帮助大型应用更有效地安排和执行工作。...不过单凭这一点,还不能称之拥有 "持久化" 特性,因此 WorkManager 底层还使用了 Room 数据库来保证当进程结束或设备重启后,您工作仍然可以执行,并有可能从中断位置继续执行。...于是,回中携带信息就可以用来生成一条通知。 有了这些辅助方法,我们就可以将 WorkManager 执行长时间运行工作所需要 ForegroundInfo 实例保存起来。...在这段代码里,我们提供了一个 suspend 标记 doWork 方法,其中调用了刚才提到分块下载辅助方法。...您需要像平常那样实现一个 suspend 标记 doWork 方法。需要注意是,当您应用占用了全部配额后,加急作业可能会被中断。

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

使用 Kotlin API 实践 WorkManager

WorkManager 提供了一系列 API 可以更加便捷地规划异步任务,即使应用关闭之后或者设备重启之后,仍然需要保证立即执行或者推迟执行任务正常处理。...对于 Kotlin 开发者,WorkManager 为协程提供了最佳支持。本文中,我将通过实践 WorkManager codelab 为大家展示 WorkManager 中与协程相关基本操作。...在这个 WorkManager codelab 教程中,我们会对图片进行模糊化处理,并且将处理后数据存储磁盘上。我们看一下这个过程中需要哪些操作。...work 请求,本例中,我们希望整个操作仅运行一次,所以我们使用 OneTimeWorkRequest.Builder,将需要模糊化处理图片 Uri 作为参数传入。...如果您在 doWork() 里调用异步 API 然后返回结果,那么您回函数执行可能会出现问题。 但是如果我希望进行异步操作怎么办?

50330

使用 WorkManager 处理需要立刻执行后台任务

为了不同使用场景更易于适配,我们通过对 WorkManager 添加功能,提升了开发者遵循后台任务限制方面的体验。 我们推荐使用 WorkManager 处理需立即执行长时间运行任务。...(): ForegroundInfo { //每一个 Notification 需要使用不同 id val notificationId = 1 return ForegroundInfo...否则在 setForeground() 调用之前,您 Worker 将会被视为非前台服务,这样可能会导致这个任务取消或引起其余不希望出现结果。...WorkManager 从基础到高级各项特性: Android Jetpack WorkManager | Android 中文教学视频 WorkManager Kotlin 中实践 WorkManager...: 周期性任务 自定义 WorkManager —— 基础概念 使用 Dagger 自定义 WorkManager Google IssueTracker 提交所遇到任何问题,这将帮助我们第一时间优化特性和修复漏洞

87720

如何使用WorkManager执行后台任务(上)

使用这个ID可以取消任务执行,或者取得当前任务执行状态。...约束类是可以使用 WorkRequest.Builder 创建时候进行传递给 WorkRequest。 WorkManager:工作任务管理器,它是用于管理工作任务请求队列类。...通过上面的描述,可以简单画出下面的关系图: ? 0x02 实践篇——工作流 假设我们开发一个图片相关APP,这个应用需要期地压缩它存储图片。我们使用 WorkManager来实现这个需求。...这时候, WorkManager执行任务时候就会考虑约束条件情况。 取消任务 取消任务需要一个任务ID,可以通过 WorkRequest来获取。...创建 WorkRequest 时候,可以执行给它指定一个Tag;而另一个任务请求也可以设置相同Tag。

1.5K20

WorkManager从入门到实践,有这一篇就够了

对于平常使用,如果一个后台任务执行过程中,app突然退出或者手机断网,这时后台任务将直接终止。 典型场景是:App关注功能。...这就产生了操作上bug,降低了用户体验,增加了用户不必要操作。 那么该如何解决呢?很简单,看WorkManager定义,使用WorkManager就可以轻松解决。...当然你不使用WorkManager也能实现,这就涉及到它另一个好处:简单。如果你不使用WorkManager,你就要对不同API版本进行区分。...其实它们本质都是实例化了一个WorkContinuationImpl,只是调用了不同构造方法。...WorkManager支持两种方式来获取响应结果 Request.id: WorkRequestid Tag.name: WorkRequest中设置tag 同时返回WorkInfo还支持LiveData

1.6K20

如何在WorkManager中处理异步任务详解

关于这个组件介绍就不多说了,网上到处都是,这里分享一下 WorkManager 中处理异步任务方法。...我们知道, WorkManager 中,处理任务方式是创建一个继承自 Worker 任务类,实现 doWork() 方法,并在这个方法中实现我们自己任务,然后返回 Result.success(...在这里, doWork() 方法中任务应该是同步,这是很自然,因为 doWork() 方法本身就是子线程中执行,因此可以 doWork() 方法中同步执行耗时操作。...但是些情况,我们想要执行是异步任务, WorkManager 中,有两种比较好处理异步任务方案。 RxWorker 很多时候我们会使用 RxJava 来处理数据。...(); mFuture.set(result); } }); return mFuture; } } 可以里面主要使用了 SettableFuture 这个类, startWork

1.6K30

笔记之Android架构组件-WorkManager

service一直用来做后台运行操作,包括一些保活,上传数据之类,这个后台运行弊端很多,比如耗电,比如设计用户隐私之类,谷歌对这些后台行为进行了一些处理,从Android Oreo(API 26...) 开始,如果一个应用目标版本为Android 8.0,当它在某些不被允许创建后台服务场景下,调用了ServicestartService()方法,该方法会抛出IllegalStateException...所以,不久将来,service使用范围会越来越小,取而代之,是谷歌推出技术:WorkManagerWorkManager工作触发器 满足时, 运行可推迟后台工作。...).getWorkInfosByTagLiveData(TAG); 使用id只能取消单个后台任务请求,而使用标签的话,则可以将同一标签名所有后台任务请求全部取消。...每个唯一工作序列都有一个名字,WorkManager一次只允许一个工作序列使用该名称,当我们创建一个新唯一工作序列时,如果已经有一个未完成序列具有相同名称,则指定WorkManager应执行操作

87410

WorkManager: 周期性任务

WorkManager v2.1 已经弃用了 WorkManager#getInstance() ,转而使用 WorkManager#getInstance(context: Context)。...数据输入和输出 WorkManager 允许您传递一个 Data 对象给您 Worker,同时 success 和 failure 方法调用时,也会返回一个新 Data 对象给您 (由于您返回...这种情况只要不进行取消操作便不会到达最终状态周期性任务身上尤其容易出现。 我们常说,即使您应用关闭或者设备重启,WorkManager 仍会保证执行您任务。...我只会在有恰当理由时才会使用 REPLACE 策略,比如,当我想要在某个 Worker doWork() 方法中对它自己重新排期时。...使用 WorkManagerTestInitHelper,您可以测试您 Worker 类时模拟延迟、约束条件和周期要求满足等情况。

1.6K30

Android Jetpack架构组件(七)之WorkManager

工作线程通常能够立即执行,并在任务完成后将结果反馈给用户,而WorkManager不是即时,它不能保证任务能够立即执行。...后台延时任务 WorkManager能够保证任务一定会被执行,但不是不能保证立即执行,也即说适当时候被执行。因为WorkManager有自己数据库,与任务相关信息和数据就保存到数据库中。...2.2 定义 Worker 创建一个继承自WorkerWorker类,然后Worker类doWork()方法中执行要运行任务,并且需要返回任务状态结果。...例如,doWork()方法实现上传图像 任务。...3.4 观察任务状态 将任务加入到队列后,我们可以根据 name、id 或与其关联 tag WorkManager 中查询任务相关信息,并且检查它状态,涉及方法有如下几个。

1.8K11

Android开发笔记(一百八十八)工作管理器WorkManager

Android11不光废弃了AsyncTask,还把IntentService一起废掉了,对于后台异步服务,官方建议改为使用工作管理器WorkManager。...当然这些后台工具用法各不相同,徒增开发者学习时间而已,于是乎谷歌索性把它们统一起来,Jetpack库中推出了工作管理器WorkManager。...因为WorkManager来自Jetpack库,所以使用之前要修改build.gradle,增加下面一行依赖配置: implementation 'androidx.work:work-runtime:...自定义工作者必须实现构造方法,并重写doWork方法,其中构造方法可获得外部传来请求数据,而doWork方法处理具体业务逻辑。...最后活动页面中集成工作管理器,运行测试App后点击启动按钮,观察到任务执行结果如下图所示,可见成功获知了后台工作运行情况。

94730

WorkManager用法

如果这些api没有正确使用,则可能导致消耗大量电量。WorkManager为应用程序中那些不需要及时完成任务提供了一个统一解决方案,以便在设备电量和用户体验间达到一个比较好平衡。...WorkManager有三个重要特点,分别如下:   1.针对是不需要及时完成任务   2.保证任务一定被执行   3.兼容范围广,最低能兼容API Level14 二.WorkManager基本使用方法...() {//耗时任务doWork()方法中执行 Log.i("OneTimeWorkRequest","Work Start!")...3.使用WorkRequest配置任务     配置任务就是告诉系统,任务何时运行及如何运行,下面结合代码讲解 public class MainActivity extends AppCompatActivity...()     (3)WorkManager.getWokInfosForUniqueWork()     如果希望实时获取任务状态,这三个方法还有对应LiveData方法,方法后面加上LiveData

36730
领券