我需要每秒运行一次线程。但是当应用程序被杀死时,线程必须仍然存活。
我的线程任务用于增加Unix时间戳(在第一次应用程序从我们的服务器时间运行时同步)每秒一次。我需要创建此任务,因为在某些设备中,日期时间可能会发生不可预测的变化(可能是电池电量不足,硬复位,掉线或其他情况)。
My Activity必须在需要时获取Unix Timestamp值。
从SO,Alarm Manager is not a good choice,
I would recommend you not to use an AlarmManager for 30 seconds, as some have suggested. Because 30 seconds is too short. it will drain the battery. For AlarmManager use a minimum 1 minute with RTC.
其他人建议使用Timer Task或ScheduledExecutorService,哪个最适合我需要的帖子?
感谢。
答案 0 :(得分:0)
你永远不会实现这一目标。任何进程都可能被系统杀死。每秒运行的任务都很糟糕(就像AlarmManager所说的那样)。
一个想法是:节省您的服务器时间和设备时间,例如SystemClock.elapsedRealtime()
。 (不要为此目的使用System.currentTimeMillis()
....这是用户的显示时间,可以由用户或其他方式更改)。
如果以后需要时间,请再次获取elapsedRealtime()
并与存储的elapsedRealtime()
进行比较,并将此差异添加到存储的服务器时间。你会得到理想的时间。
或者只是询问服务器的当前时间,取决于需求:)。
如果您想关注硬重置,我认为您应该在服务器上安装数据库,以便在用户启动应用时第一次进行管理。