BroadcastReceiver与服务

时间:2011-09-18 08:15:24

标签: android service broadcastreceiver

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

实际上,我要做的是:

  

在每天的某个时间,下载用户事件(例如:上午9:00吃   早餐)从数据库,并设置AlarmManager显示   有关该事件的通知。

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

谢谢。

2 个答案:

答案 0 :(得分:18)

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

  

处理广播时,应用程序会给出一组固定的   进行工作的时间(目前为10秒)。如果没有   在那个时候完成,申请被认为是   行为不端,其过程立即投入到后台   如果需要,可以为记忆杀死。

答案 1 :(得分:5)

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

  

流程生命周期

     

当前正在执行BroadcastReceiver的进程(即,   当前在其onReceive(Context,Intent)方法中运行代码)   被认为是一个前台进程,将继续运行   该系统除了极端记忆压力的情况外。

     

从onReceive()返回后,BroadcastReceiver不再存在   活跃,其托管过程与其他任何一样重要   在其中运行的应用程序组件。这是特别的   重要的是因为如果那个过程只是托管的那个   BroadcastReceiver(用户拥有的应用程序的常见情况)   从来没有或最近没有与之互动过,然后从...返回   onReceive()系统会认为它的进程是空的   积极地杀死它,以便资源可用于其他更多   重要的过程。

     

这意味着对于长时间运行的操作,您通常会使用a   与BroadcastReceiver一起服务以保持包含   在整个操作过程中处于活动状态。

来自:BroadcastReceiver