android - 我可以用 JobScheduler 做所有 BroadcastReceiver 可以做的事情吗?
问题描述
我有一个使用BroadcastReceiver
(BR
简称)在清单中注册的应用程序intent-filter
ACTION_POWER_CONNECTED
和ACTION_POWER_DISCONNECTED
。
这会在手机插入时BR
启动Service
,当手机拔出时它将停止Service
。
这个Service
注册另一个BR
,我这样做是因为我ACTION_BATTERY_CHANGED
想在手机充电时注册,即使应用程序关闭/销毁,我也使用它来保持注册。ACTION_BATTERY_CHANGED
BR
Service
该应用程序适用于所有API级别,除了 27。
我知道在API 27 中有BRs
一些限制,所以我试图弄清楚什么是有效的,什么不是。
我认为第一个BR
(清单中的那个)从未注册过,而另一个正在工作(我也启动了主活动的Service
inonCreate
方法,所以第二个BR
在打开应用程序时注册)但是当我关闭应用程序Service
会自动停止/销毁,因此第二个BR
将注销。
在API级别低于 27Service
时,不会自动停止/销毁。
有人告诉我:
你为什么不试试
IntentService
...
然后他说:
你知道,这个想法很愚蠢,不要尝试。
所以我没有尝试。
网上大家都在说用JobScheduler
,看了一下JobScheduler
觉得JobScheduler
和BRs
所以我的问题是我可以做所有BroadcastReceiver
可以做的事情JobScheduler
吗?
我的意思是我可以在没有BRs
但使用JobScheduler
.
解决方案
不,JobScheduler
不是来代替BroadcastReceiver
的。
BroadcastReceiver
让您通知已System/Custom
定义的事件集,以便您可以基于此执行某些任务。
JobScheduler
允许您Schedule
执行某些任务,该任务将在遇到意愿时执行Defined Criteria
。
看看定义,他们的工作区域可能有一些重叠,但两个执行非常独立的功能。
编辑评论:-
您可以使用 来执行此操作JobScheduler
,因为这提供了在 Charger Plug-In 时执行某些任务的方法。
val jobBuilder = JobInfo.Builder(JOB_ID, ComponentName(this, SyncServices::class.java))
jobBuilder.setRequiresCharging(true)
val ss = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
ss.schedule(jobBuilder.build())
这将SyncServices
在充电器插件时启动。
现在,您可以从同步服务执行某些任务并最终返回任务完成或未完成的状态,具体取决于它将再次调用。您可以JobScheduler
在 ( https://developer.android.com/reference/android/app/job/JobScheduler)[这里]找到有关详细信息。
推荐阅读
- postgresql - 如何在具有联结表的范围内使用约束?
- c# - Task WhenAll 方法获取 Azure ServiceBus 的已完成任务列表发送批量消息
- sql - 不使用 SWITCH CASE 的条件操作
- javascript - 如何在异常时继续地图循环?
- windows - 在 Eclipse 中创建新的 Maven 项目时出错(尝试了 StackOverflow 和谷歌的所有可能答案,但没有运气)
- google-sheets - 如何按工作日在 Google 表格图表上显示 4 周的数据?
- java - Java - 使用 jUnit 测试套接字通信
- c - 线程在内存中的位置?
- python - 如何使用 Python 将列表元素转换为字符串?
- java - 如何在 JAX-RS 中使用特定的 Json 序列化?