Android 广播接收机还是服务?

Android 广播接收机还是服务?,android,service,broadcastreceiver,alarmmanager,Android,Service,Broadcastreceiver,Alarmmanager,我有一个AlarmManager,它每X分钟触发一次警报 当警报触发时,我正在执行一些操作,比如读取一个小文件和更新SharedReferences 在这种情况下,建议对这些操作使用什么 服务似乎很合适,但由于这些都是相对较短的操作,也许广播接收器更好(更轻?) 看起来BroadcastReceiver和服务都在同一个进程和UI线程上运行,唯一的区别在于Android如何以及何时杀死它们。对吗 据我所知,AlarmManger可以调用接收者或服务(或活动,但现在这无关紧要)。我的闹钟一直在响,即

我有一个AlarmManager,它每X分钟触发一次警报

当警报触发时,我正在执行一些操作,比如读取一个小文件和更新SharedReferences

在这种情况下,建议对这些操作使用什么

服务似乎很合适,但由于这些都是相对较短的操作,也许广播接收器更好(更轻?)

看起来BroadcastReceiver和服务都在同一个进程和UI线程上运行,唯一的区别在于Android如何以及何时杀死它们。对吗


据我所知,AlarmManger可以调用接收者或服务(或活动,但现在这无关紧要)。我的闹钟一直在响,即使我的应用程序没有运行。因此,无论哪种方式(服务或广播接收器)都会在我的应用程序未运行时启动我的进程。根据用户的不同,警报可能每10秒响一次。因此,在这种情况下,IntentService必须每10秒启动一个线程。这不是对系统的“苛刻”吗?谢谢。

如果您已经在使用AlarmManager,请在任何活动(或片段)中使用BroadcastReceiver来执行您提到的操作。请记住,两者都将在UI线程上运行,因此请使用AsyncTask或线程

您不需要运行服务,因为您的警报将由AlarmManager触发。无需为此生成新的进程(服务)

您可以从另一个角度(如果您使用服务)来解决问题,方法是不使用AlarmManager并每X分钟发布一次Runnable,但第一种方法应该可以

更新

也许你误解了我。服务可以在不同的进程中运行(虽然默认情况下它不会运行),但它与BroadcastReceiver不同。如果您使用的是AlarmManager,则无需运行服务

服务和广播接收器之间的差异通常是新安卓开发人员困惑的根源

如果不知道每X分钟需要执行的工作的性质,就很难判断最佳方案是什么

只要您了解运行服务(在其不同模式下)的后果和/或如何不阻止UI线程,那么是的,使用服务通常是好的,即使是IntentService也可以帮助您

也许您想将AlarmManager与IntentService结合使用,但请注意,这并不会阻止设备进入睡眠状态,您还可以使用将为您保留唤醒锁的。广播接收器(短接收器)是一个Android组件,允许您注册系统或应用程序事件。一旦事件发生,Android运行时将通知事件的所有注册接收者!
是的,你可以使用它

在我的应用程序中,我使用了带有AlarmManagar的BroadcastReceiver。不知道哪种服务或广播更好@作为记录,如果你想尝试,在两者之间“切换”并不难。创建和使用服务相对来说很简单:)@MartínMarconcini,我同意,但我不确定应该衡量什么来决定哪一个更好:)显然两者都可以工作。测试,很多测试:)一般来说,采用简单的方法(BR)。如果你觉得你的任务没有被执行或者有什么不好,那就考虑一个服务…这是我的0.2美分:)一个服务在同一个进程和线程上运行作为UI,所以它不是一个新的进程。看起来所有的区别都在于安卓什么时候杀了它。我更新了我的问题,让它更清楚,谢谢。如果你的任务性质是“时不时做几件事”,我想你不需要服务。服务意味着在后台执行一段时间的操作,而不管用户在前台做什么(即使他当时不在应用程序中)。意向将广播到所有具有匹配意向筛选器的接收器。但是广播接收机做了一些事情,也做了一些事情。(直到你再次打电话给他们)。如果每个警报之间有“分钟”,我会选择BR。请允许我为您提供更完整的回答: