BroadcastReceiver与服务

Bea*_*ear 13 service android broadcastreceiver

那么,在android中,在broadcastReceiver中执行某些操作在broadcastReceiver中调用另一个服务之间有什么区别?我认为他们都在后台运行,对吗?

实际上,我要做的是:

在每天的特定时间,从数据库下载用户事件(例如:早上9点吃早餐),并设置AlarmManager以显示有关事件的通知.

现在我设置了一个报警管理器来完成上述任务.如果我在BroadcastReceiver中直接完成此操作或在BroadcastReceiver中调用服务来完成此操作,我感到很困惑.

谢谢.

Ker*_*rry 18

你应该尽可能在BroadcastReceiver中进行LITTLE处理,因为(引自Android博客)

处理广播时,应用程序将获得一组固定的时间(当前为10秒)来完成其工作.如果它在那段时间内没有完成,那么应用程序被认为是行为不端,并且如果需要,它的进程立即被抛入后台状态以便为内存被杀死.


pet*_*tos 5

如果您的行动需要更长的时间(连接到互联网可能需要一些时间),您可以为此目的从接收方呼叫服务.广播接收器受到最大限度的时间限制,必须完成.

流程生命周期

当前正在执行BroadcastReceiver的进程(即,当前在其onReceive(Context,Intent)方法中运行代码)被认为是前台进程,并且除非在极端内存压力的情况下,系统将继续运行该进程.

从onReceive()返回后,BroadcastReceiver不再处于活动状态,其托管进程与其中运行的任何其他应用程序组件一样重要.这一点尤其重要,因为如果该进程只托管BroadcastReceiver(用户从未或最近没有与之交互的应用程序的常见情况),那么从onReceive()返回时,系统会认为其进程为空并且积极地杀死它使资源可用于其他更重要的过程.

这意味着对于运行时间较长的操作,您通常会将一个服务与BroadcastReceiver结合使用,以便在整个操作期间保持包含进程处于活动状态.

来自:BroadcastReceiver