首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >现代Android系统中的后台处理

现代Android系统中的后台处理
EN

Stack Overflow用户
提问于 2022-05-28 11:49:38
回答 2查看 621关注 0票数 4

我用WorkManager和这个指南的用法实现了一些后台任务。有一次我需要使用CoroutineWorker。我发现这些指南相当不错,但是每次我需要新的背景处理要求时,我就开始对我所需要的进行新的研究。因此,我的问题是,用现代Android解决以下用例的正确方法是什么。此外,请考虑不同的手机品牌扼杀背景任务的挑衅(一些品牌更苛刻的背景处理)。我什么时候需要使用持久通知,什么时候不需要,什么时候使用AlarmManger。请为每一种最好的实现方式以及如果持久通知需要的话写。

用例:

1.下载大文件(500)

一天一次,准确的时间

B每天一次操作系统可以,在任何时候

2.下载小文件(5k)

一天一次,准确的时间

B每天一次操作系统可以,在任何时候

3.在准确时间设置警报

4.与服务器同步DB (大数据约5分钟运行时)

每15分钟一次(最小时间?)

b.一天一次

5.与服务器同步DB (小于1秒运行时的小数据)

a.每5分钟一次

b.每15分钟一次

c.每天一次

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-31 10:01:45

根据本参考 of WorkManager,有三种类型的持久化工作可以通过它来安排,

  • 立即:必须立即开始并很快完成的任务。可能会加速。
  • 长时间运行:可能运行时间更长、可能超过10分钟的任务。
  • Deferrable:在稍后时间开始并可以定期运行的计划任务。

这意味着大多数用例都可以通过使用WorkManager来实现,除非有两种情况需要它“每5分钟运行一次”&“在确切的时间设置警报”。

这里建议,如果您想在确切的时间设置警报,那么不应该使用WorkManager,而应该使用AlarmManager,它会在指定的时间从打瞌睡模式中唤醒设备。

检查工作经理提供的所有可能的执行:

(https://developer.android.com/topic/libraries/architecture/workmanager#types提供)

因此,以下是您可以根据用例使用的所有可能方法:

  1. 下载大文件(500) 一天一次,准确的时间 答案:您可以从给定的开始时间起每24小时使用一次PeriodicWork,因为它是长时间运行的操作,所以您可以加快/前台跟踪正在进行的进度。尽管要记住,下载需要活动的internet连接,如果没有可用,则需要在指定的时间间隔内下载,但它将被安排为延迟/稍后执行。 .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) //附加配置.build() //从doWork()调用setForeground()将显示正在进行的通知 b.每天一次操作系统可以,在任何时候 答案:--这是您可以使用PeriodicWork不确定地执行某些任务的最佳示例。在这里,您可以将其推迟,因为它不需要在特定的时间执行。 PeriodicWorkRequestBuilder(1,TimeUnit.DAYS) //其他配置.build() //从doWork()调用setForeground()将显示正在进行的通知
  2. 下载小文件(5k) 一天一次,准确的时间 回答:可以是PeriodicWork,可以立即执行(快速工作),计划时间为24小时,因为下载小文件不会花很长时间。 .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) //附加配置.build() b.每天一次操作系统可以,在任何时候 回答:可以是可以推迟执行的PeriodicWork,可以安排在24小时内执行。 PeriodicWorkRequestBuilder(1,TimeUnit.DAYS) //附加配置.build()
  3. 在精确时间设置警报 回答:设置警报要在准确的时间执行,您应该使用AlarmManager。这种用法在WorkManager中是不可能的,因为它不会中断Doze模式(设备的深度睡眠)。
  4. 同步数据库与服务器(大数据约5分钟运行时) 每15分钟一次(最短时间?) 回答:,这可以是PeriodicWork,因为它长时间运行,所以每隔15分钟就安排一次前台工作。 PeriodicWorkRequestBuilder(15,TimeUnit.MINUTES) //其他配置.build() //从doWork()调用setForeground()将显示正在进行的通知 b.一天一次 回答:,这可以是PeriodicWork每24小时安排一次的前台工作,因为它是长时间运行的。 PeriodicWorkRequestBuilder(1,TimeUnit.DAYS) //其他配置.build() //从doWork()调用setForeground()将显示正在进行的通知
  5. 同步数据库与服务器(小数据小于1秒运行时) a.每5分钟一次 回答:这个用例是无法实现的,因为WorkManager定期工作的最小时间框架是15分钟。因此,建议采用前台服务/告警管理器相结合的方式手动管理这一周期性工作。 b.每15分钟一次 回答:--这是由PeriodicWork安排的,每15分钟就可以实现一次,根据所要求的紧急/放松程度,可以加快或推迟。 .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) // PeriodicWorkRequestBuilder(15,TimeUnit.MINUTES) PeriodicWorkRequestBuilder //决定是加快还是推迟在这里有条件地//附加配置.build() c.每天一次 回答:--这是PeriodicWork计划每24小时一次的例子,根据所需的紧急/放松程度,可以加快或推迟。 .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) // PeriodicWorkRequestBuilder(1,TimeUnit.DAYS) PeriodicWorkRequestBuilder //决定是加快还是推迟在这里有条件地//附加配置.build()

创建长期运行的工作人员的参考:https://developer.android.com/topic/libraries/architecture/workmanager/advanced/long-running#long-running

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2022-05-28 14:35:51

请查看我在这里给出的答案,以获得更多信息:

Android推荐的可靠API用于周期性的后台工作?

1.下载一个大文件(500)

a.每天在准确的时间设置一次--您可以在这里设置一个确切的警报,但是在后台启动服务时,您会遇到Android12的限制(其他评论将对此进行详细介绍)。因此,这取决于用例。我只是不想去那里。

b每天一次,而操作系统可以在任何时候-与WorkManager一起使用,但理论上它取决于电源桶,所以如果您进入较低的,您可能会超过一天。而且,开始和结束是不同的。你可能会开始达到每天10分钟的极限。(其他评论中将对此进行详细介绍)

2.下载小文件(5k) a.一天一次的准确时间-作为一个大文件。

b每天一次操作系统可以,在任何时间-作为一个大文件.

3.在准确的时间设置警报- - --这取决于你做什么.我不明白

4.将DB与服务器(大约5分钟运行时的大数据)同步--这样的事情需要WorkManager。

所有以上-15分钟来自Doze模式。但就连它也有“两种口味”。这15分钟只是理论上的。在现实中,它可能更多。WorkManager有“周期性工作”的概念。在现实中,没有这样的东西。WorkManager使用约束的概念。因此,你有一个约束,你需要一个网络,你被限制,你需要一个设备充电,你有一个“时间限制”。所以你看--一个24小时的“周期性工作”只是一个额外的约束:“不要在24小时内开始”。但这并不意味着“每24小时一次”。在理论上,24可能已经通过,时间约束是满足的,然后由于其他原因,您在1周内成功执行,并且工作将被重新安排为另一个24小时的时间限制。

对于“每5分钟、15分钟、15分钟”之类的内容,只需在服务通知中使用以下文本创建一个服务:“我们的应用程序讨厌您的电池”,永远不要停止它,做您需要的任何事情:)但是完全违背了新的Android概念。

即使您使用推送通知(如果它们不是高优先级),您也会有效地返回到WorkManager做稍后的工作。

就像我说的:“一天一次”的意思是“一天一次”。

a.每15分钟一次(最短时间?)

b.一天一次

5.与服务器同步DB (小于1秒运行时的小数据)

a.每5分钟一次

b.每15分钟一次

c.一天一次

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72415454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档