BroadcastReceiver or Service?



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

当警报触发时,我会做一些操作,比如读取一个小文件和更新SharedPreferences。

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

服务似乎很合适,但由于这些操作相对较短,也许BroadcastReceiver更好(更轻?)?

BroadcastReceiver和Service似乎都在同一个进程和UI线程上运行,唯一的区别是Android如何以及何时杀死它们。这是正确的吗?

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

如果您已经在使用AlarmManager,那么在任何具有代码的活动(或片段)中使用BroadcastReceiver来执行您提到的操作。请记住,任何一个都将在UI线程上运行,因此请使用AsyncTask或Thread。

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

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

更新

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

Service和BroadcastReceiver之间的差异通常是新安卓开发者混淆的根源。

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

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

也许你想将AlarmManager与IntentService连接起来,但要注意这并不能阻止设备进入睡眠状态,你还可以使用WakefulIntentService为你保留唤醒锁。

广播接收器(短接收器)是一个Android组件,允许您注册系统或应用程序事件。事件发生后,Android运行时会通知所有注册的事件接收者!是的,你可以用

相关内容

最新更新