其他分享
首页 > 其他分享> > android – 使用Timers重复IntentService – 这是可取的吗?

android – 使用Timers重复IntentService – 这是可取的吗?

作者:互联网

我有一个从服务器下载数据的IntentService,我希望IntentService以一定的间隔检查服务器更新.但是,以下帖子建议不要使用计时器重复服务 – 而是强调使用AlarmManager:

Why doesn’t my Service work in Android? (I just want to log something ever 5 seconds)

Android – Service: Repeats only once

Android service stops

从Android的参考手册中,IntentService被描述为:

IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. Clients send requests through startService(Intent) calls; the service is started as needed, handles each Intent in turn using a worker thread, and stops itself when it runs out of work.

This “work queue processor” pattern is commonly used to offload tasks from an application’s main thread. The IntentService class exists to simplify this pattern and take care of the mechanics. To use it, extend IntentService and implement onHandleIntent(Intent). IntentService will receive the Intents, launch a worker thread, and stop the service as appropriate.

All requests are handled on a single worker thread — they may take as long as necessary (and will not block the application’s main loop), but only one request will be processed at a time.

我不太明白的部分是为什么不允许使用Timer重复执行IntentService(帖子有针对服务而不是IntentService的问题),因为它创建了自己的工作线程以供执行.是否允许在IntentService中使用Timer?或者AlarmManagers是定期执行IntentService的唯一解决方案吗?

对此的解释将是最受欢迎的.

解决方法:

Or are AlarmManagers the only solution to periodically execute an IntentService ?

如果你想让它可靠地工作,是的.使用AlarmManager对用户来说也更友好.

首先,没有任何形式的服务运行,除非它正在积极地为用户提供价值.观看时钟标记并不是主动为用户提供价值.运行服务使您的流程比其他流程具有更高的优先级,就终止哪些流程以释放系统RAM以用于将来的工作而言.不必要地提供服务 – 例如简单地观察时钟滴答 – 阻碍了用户多任务处理的能力,因为您不必要地占用系统RAM.

此行为将导致某些用户使用任务杀手攻击您,例如从最近任务列表中滑动您的应用程序.这将终止您的过程,因此您的计时器也会消失.同样,由于太多草率开发人员长时间保持服务,Android会在一段时间后自动终止此类流程,尽管服务仍然如此.

最后,通常“以一定间隔检查服务器更新”的一个方面是,即使设备进入睡眠模式,您也希望进行此项工作.使用永久服务方法,需要使用WakeLock始终保持CPU开启状态.这将显着影响用户的电池,导致您的应用程序出现在“设置”应用的“电池责任屏幕”上.结合捆绑系统RAM“功能”,可能会对您的应用程序产生一些不良评级.

相反,通过使用AlarmManager:

>您的IntentService只需在其工作(“检查服务器更新”)时运行,在这些事件之间消失,因此可以终止您的进程以释放系统RAM以用于用户正在执行的其他操作
>通过使用WakefulBroadcastReceiver或WakefulIntentService模式,您可以短暂唤醒设备以执行此工作,然后让设备重新进入休眠状态,从而最大限度地减少对电池的影响

标签:android,android-alarms,android-intentservice
来源: https://codeday.me/bug/20190725/1530467.html