use*_*702 3 android android-alarms android-intentservice
我有一个IntentService从服务器下载数据,我希望IntentService以一定的间隔检查服务器更新.但是以下帖子建议不要重复Service使用a Timer- 而是强调使用AlarmManager:
为什么我的服务不适用于Android?(我只想记录5秒钟的东西)
从Android的参考手册中,IntentService被描述为:
IntentService是服务的基类,可根据需要处理异步请求(表示为Intents).客户端通过startService(Intent)调用发送请求; 根据需要启动服务,使用工作线程依次处理每个Intent,并在工作失败时自行停止.
这种"工作队列处理器"模式通常用于从应用程序的主线程卸载任务.存在IntentService类以简化此模式并处理机制.要使用它,请扩展IntentService并实现onHandleIntent(Intent).IntentService将接收Intents,启动工作线程,并根据需要停止服务.
所有请求都在一个工作线程上处理 - 它们可能需要多长时间(并且不会阻止应用程序的主循环),但一次只能处理一个请求.
我不太明白的部分是为什么不允许使用Timer重复执行IntentService(帖子有针对a Service而不是a的问题),IntentService因为它创建了自己的工作线程以供执行.允许在一个Timer内使用IntentService吗?或者是AlarmManagers定期执行的唯一解决方案IntentService?
对此的解释将是最受欢迎的.
或者AlarmManagers是定期执行IntentService的唯一解决方案吗?
如果你想让它可靠地工作,是的.使用AlarmManager对用户来说也更友好.
首先,你不能有Service任何形式的运行,除了当它被积极地将价值传递给用户.观看时钟标记并不是主动为用户提供价值.有一个Service正在运行的给你的过程有点比其它工艺更高的优先级,哪些进程就会被终止,以腾出未来的工作系统RAM方面.有一个Service不必要的周围-比如简单地看着时钟滴答-阻碍了用户的多任务好了,你不必要的占用系统内存的能力.
此行为将导致某些用户使用任务杀手攻击您,例如从最近任务列表中滑动您的应用程序.这将终止您的流程,因此您Timer也会消失.同样,由于太多草率的开发人员Service长时间保持他们的存在,Android会在一段时间后自动终止此类流程,Service尽管如此.
最后,通常"以一定间隔检查服务器更新"的一个方面是,即使设备进入睡眠模式,您也希望进行此项工作.使用永久服务方法,这将要求您始终保持CPU开启,使用WakeLock.这将显着影响用户的电池,导致您的应用程序出现在"设置"应用的"电池责任屏幕"上.结合捆绑系统RAM"功能",可能会对您的应用程序产生一些不良评级.
相反,通过使用AlarmManager:
您IntentService唯一需要在它正在运行时运行("检查服务器更新"),在这些事件之间消失,因此您的进程可以终止以释放系统RAM以用于用户正在执行的其他操作
通过使用WakefulBroadcastReceiver或WakefulIntentService模式,您可以短暂唤醒设备以执行此项工作,然后让设备再次重新进入睡眠状态,从而最大限度地减少对电池的影响
| 归档时间: |
|
| 查看次数: |
4002 次 |
| 最近记录: |