BroadcastReceiver还是服务?

时间:2014-02-22 08:33:39

标签: android service broadcastreceiver alarmmanager

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

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

在这种情况下建议用于这些操作的是什么?

服务似乎很合适,但由于这些操作相对较短,因此广播接收可能更好(更轻?)?

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

据我所知,AlarmManger可以调用Receiver或Service(或者一个Activity,但现在不相关)。即使我的应用程序没有运行,我的警报也会一直运行。因此,如果我的应用程序没有运行,无论哪种方式(服务或广播接收器)都将启动我的进程。警报每10秒钟就会熄灭,这取决于用户。因此,在这种情况下,IntentService必须每10秒启动一个线程。这不是系统的“苛刻”吗?感谢。

2 个答案:

答案 0 :(得分:2)

如果您已经在使用AlarmManager,那么在任何Activity(或Fragment)都有代码的情况下使用BroadcastReceiver来执行您提到的操作。请记住,要么在UI线程上运行,请使用AsyncTask或Thread。

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

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

更新

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

Service和BroadcastReceiver之间的区别通常是新Android开发者之间混淆的原因。

如果不了解每X分钟需要执行的工作的性质,很难说出最佳方案是什么。

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

也许您想将AlarmManager与IntentService结合,但要注意这并不妨碍设备进入睡眠状态,您也可以使用 WakefulIntentService来保留唤醒锁。

答案 1 :(得分:1)

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