嗯,在android中,在broadcastReceiver中执行某些操作和在broadcastReceiver中调用另一个服务之间有什么区别?我认为他们都在后台运行,对吧?
实际上,我要做的是:
在每天的某个时间,下载用户事件(例如:上午9:00吃 早餐)从数据库,并设置AlarmManager显示 有关该事件的通知。
现在我设置了一个报警管理器来完成上述任务。如果我在BroadcastReceiver中直接完成此操作或在BroadcastReceiver中调用服务来完成此操作,我感到很困惑。
谢谢。
答案 0 :(得分:18)
你应该尽可能在BroadcastReceiver中进行LITTLE处理,因为(引自Android Blog)
处理广播时,应用程序会给出一组固定的 进行工作的时间(目前为10秒)。如果没有 在那个时候完成,申请被认为是 行为不端,其过程立即投入到后台 如果需要,可以为记忆杀死。
答案 1 :(得分:5)
如果您的行动需要更长的时间(连接到互联网可能需要一些时间),您可以为此接受来自接收方的服务。广播接收器受到最长时间的限制,必须完成。
流程生命周期
当前正在执行BroadcastReceiver的进程(即, 当前在其onReceive(Context,Intent)方法中运行代码) 被认为是一个前台进程,将继续运行 该系统除了极端记忆压力的情况外。
从onReceive()返回后,BroadcastReceiver不再存在 活跃,其托管过程与其他任何一样重要 在其中运行的应用程序组件。这是特别的 重要的是因为如果那个过程只是托管的那个 BroadcastReceiver(用户拥有的应用程序的常见情况) 从来没有或最近没有与之互动过,然后从...返回 onReceive()系统会认为它的进程是空的 积极地杀死它,以便资源可用于其他更多 重要的过程。
这意味着对于长时间运行的操作,您通常会使用a 与BroadcastReceiver一起服务以保持包含 在整个操作过程中处于活动状态。