我的应用使用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
稍微查看后,我觉得JobScheduler
与JobScheduler
不同
所以我的问题是我可以执行JobScheduler
BRs
可以做的所有事情吗?
我的意思是我可以在没有BroadcastReceiver
的情况下制作我的整个应用,但使用JobScheduler
。
答案 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
的详细信息