我可以做任何BroadcastReceiver可以用JobScheduler做的事吗?

时间:2018-05-30 13:30:01

标签: android broadcastreceiver android-jobscheduler

我的应用使用BroadcastReceiver (简称为BR清单中注册intent-filter {{1 }和ACTION_POWER_CONNECTED

当手机插上电话时,此ACTION_POWER_DISCONNECTED会启动BR,当电话被拔下时,它会停止Service

Service注册另一个Service BR,我这样做是因为我想在手机注册时注册ACTION_BATTERY_CHANGED ACTION_BATTERY_CHANGED充电,我使用BR来保持注册,即使该应用被关闭/销毁。

该应用适用于所有 API 级别,但27。

除外。

我知道在 API 27中有Service的内容有些限制,所以我试图弄清楚究竟有什么用,有什么用。

我认为第一个BRs 清单中的那个)永远不会注册,另一个正在工作(我也是在主要活动的BR方法中启动Service,以便在打开应用时注册第二个onCreate 但是当我关闭应用时{{1}自动停止/销毁,因此第二个BR将取消注册。

API 级别低于27时Service未自动停止/销毁。

有人告诉我:

  

为什么不试试BR ...

然后他说:

  

你知道,这个想法很愚蠢,不要尝试。

所以我没有尝试过。

网络中的每个人都在说Service,在IntentService稍微查看后,我觉得JobSchedulerJobScheduler不同

所以我的问题是我可以执行JobScheduler BRs可以做的所有事情吗? 我的意思是我可以在没有BroadcastReceiver的情况下制作我的整个应用,但使用JobScheduler

1 个答案:

答案 0 :(得分:0)

不,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

现在来自同步服务您可以执行某些任务并最终返回任务已完成或未完成的状态,具体取决于它将再次调用。您可以在(https://developer.android.com/reference/android/app/job/JobScheduler)[here]

处找到有关JobScheduler的详细信息