为什么建议通常在使用闹钟管理器时传递意向服务的待定意图?在警报管理器调用的广播接收器的onreceive()函数中可以做同样的事情。使用服务有什么优势(意向服务)?在android中使用广播recevire与闹钟管理器
回答
如果您需要完成的一切都可以在BroadcastReceiver
的onReceive
中完成,那么您应该使用它而不是IntentService
。
如果您想在BroadcastReceiver
之后执行任何操作,那么您应该使用IntentService
。例如,如果您希望BroadcastReceiver
启动Service
,并且您希望该服务获得WakeLock
,则应该使用IntentService
代替。
原因是,AlarmManager
只保证BroadcastReceiver
的onReceive
将运行,即使您使用RTC_WAKEUP
。所以,如果你使用BroadcastReceiver
/Service
组合,那么CPU在Service
可以获得WakeLock
之前就会睡着 - 这就是说,除非你在BroadcastReceiver
中获得WakeLock
并且你在服务中获得一个,也许通过static
WakeLock
。但是,这是......凌乱,我想。
顺便说一句,我从未实施过IntentService
。我只是使用BroadcastReceiver
和Service
组合,并从未报告过问题。我所提供的信息是事情,我从其他SO职位(主要来自CommonsWare)读
编辑:
我从一些CommonsWare读取的50ms的时间框架贴在计算器上,并CommonsWare似乎是一个相当Android的可靠知识来源。
我看着它,并The docs不这样说:
(有被打死10秒,系统 之前允许考虑到被阻挡的接收器和一个候选超时)。
而且他们也说:
如果广播接收器通过一个标签推出,那么对象是从这个函数返回后没有 不再活着。
- 你不应该做任何接近10秒的事情,为了安全起见。
- 如果您需要等待任何回应,
BroadcastReceiver
将会因为onReceive
可能会在您收到回复之前完成运行而死掉。
虽然,我想50毫秒的时间框架的原因是,所以你不会冒险造成ANR或任何滞后。因为如果你使用Service
,那么你可以开始一个新的Thread
,它不会阻塞。您将无法在BroadcastReceiver
中启动新的Thread
,因为线程之后的代码将继续运行,BroadcastReceiver
将会死亡,然后Thread
也会死亡。
- 1. Android:我的闹钟管理器广播接收器不工作
- 2. 使用闹钟管理器在Android中设置闹钟
- 3. android的闹钟管理器
- 4. 使用android管理器设置闹钟?
- 5. 如何使用android闹钟管理器设置多个闹钟
- 6. 在Android中取消闹钟管理器
- 7. 闹钟管理器不停止播放
- 8. 使用闹钟管理器和广播接收器呼叫活动
- 9. 关于闹钟管理器在android
- 10. 服务和在android中使用闹钟管理器的区别
- 11. 在android中使用闹钟管理器面对通知问题
- 12. 使用Android中的闹钟管理器安排任务
- 13. 闹钟管理器不适用于我
- 14. 闹钟管理器不起作用
- 15. 如何处理闹钟和闹钟接收器广播暂停播放mediaplayer对象
- 16. 如何在android中添加日期到闹钟管理器
- 17. 闹钟管理器在Android中不工作
- 18. 如何在android中设置闹钟管理器一致?
- 19. 什么意图做闹钟广播?
- 20. 使用android闹钟
- 21. 无法创建闹钟管理器
- 22. 闹钟管理器没有触发
- 23. 闹钟管理器意外停止
- 24. 安卓闹钟管理器在代码中注册了广播接收器而不是清单
- 25. Android闹钟管理器:OnRecive和PendingIntent服务不会被调用
- 26. Android Studios闹钟管理器应用程序已关闭
- 27. Android闹钟管理器在特定时间运行任务
- 28. 创建闹钟闹钟Android
- 29. 为什么使用闹钟管理器重复任务在android上不准确?
- 30. 具有灵活时间表的Android闹钟管理器?
我在问的是服务能够做到广播接收机不能做什么? – Ashwin 2012-04-02 07:20:20
如果你必须做的事情需要超过50毫秒,你应该使用'服务',因为'BroadcastReceiver'是短命的。因此,对于诸如从服务器轮询,发送短信并检查其状态或播放音频等内容,您需要一个“服务”。 – Jakar 2012-04-02 09:40:01
广播接收机意味着什么?在完成工作之前会死吗? – Ashwin 2012-04-02 10:27:04