Java 计时器和alarmmanager之间的区别

Java 计时器和alarmmanager之间的区别,java,android,Java,Android,我对Android中使用的Timer和AlarmManager有点困惑 它们之间的主要区别是什么 他们都计划每秒钟运行一次任务。首选的主要场景是什么 例如,对于X情况,使用定时器,但另一方面,对于Y情况,使用AlarmManager定时器启动一个服务,它频繁地执行代码,甚至认为它实际上什么都没有做 另一方面,Alarmmanager将启动一个始终在后台运行的服务,这是您希望用来安排代码在应用程序未打开时运行的服务。计时器将启动一个线程,跟踪何时启动代码。如果设备进入睡眠状态,计时器线程也会进入睡

我对Android中使用的
Timer
AlarmManager
有点困惑

它们之间的主要区别是什么

他们都计划每秒钟运行一次任务。首选的主要场景是什么


例如,对于X情况,使用
定时器
,但另一方面,对于Y情况,使用
AlarmManager

定时器启动一个服务,它频繁地执行代码,甚至认为它实际上什么都没有做


另一方面,Alarmmanager将启动一个始终在后台运行的服务,这是您希望用来安排代码在应用程序未打开时运行的服务。

计时器将启动一个线程,跟踪何时启动代码。如果设备进入睡眠状态,计时器线程也会进入睡眠状态,您的代码将无法按时执行<另一方面,code>AlarmManager的报警是内核级的。根据注册方式的不同,您可以请求唤醒设备,或在下次唤醒设备时执行。警报通常更可取,使用的资源更少

除此之外,文档还指出,
只要报警接收器的onReceive()方法正在执行,报警管理器就会保持CPU唤醒锁。这保证了在您处理完广播之前,手机不会休眠。一旦onReceive()返回,报警管理器将释放此唤醒锁。
正确,但这并不意味着可以在
onReceive()中执行长时间操作。
。如果你需要做任何可能需要一些时间的事情(磁盘或网络访问),你应该启动一个服务来完成这项工作(这反过来需要使用唤醒锁),并尽快从
onReceive()
返回。是的,你是对的。如果我没有错的话,他可以使用IntentService(就像我们可以从alarmmanager启动服务一样),对吗?