首页 文章

BroadcastReceiver还是服务? [重复]

提问于
浏览
1

这个问题在这里已有答案:

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

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

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

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

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

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

2 回答

  • 1

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

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

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

    UPDATE

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

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

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

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

    也许你想把你的AlarmManager与IntentService结合起来,但要注意这并不妨碍设备进入睡眠状态,你也可以使用WakefulIntentService为你保留一个唤醒锁 .

  • 2

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

相关问题