我正在编写一个监听各种传感器的应用程序。它在录音 session 中收听它们,每个 session 都包括在不同持续时间(带有偏移)收听各种线路。当录制 session 结束时,整个数据被打包到一个 RecordingSession
对象中并发送给服务器。
录制 session 之间始终存在间隔:
####### RecordingSession 1 ######## ####### RecordingSession 2 ########
#|********* Line 1 **************|# #|********* Line 1 **************|#
# |********* Line 2 ******|# ** interval ** # |******** Line 2 ******|# ...
# |**** Line 3 ***|# # |**** Line 3 ***|#
################################### ###################################
我知道我可以使用Java的Timer
,然后安排TimerTasks
不同的持续时间和偏移量。三个用于 Lines
的 TimerTasks,一个用于存储 RecordingSession
并创建一个新的 TimerTasks。
现在我的问题是,应该可以将录制 session 之间的间隔设置为 0(如下列表所示)。我预计,即使我设置了正确的时间,计时器也不能保证每个定时任务的完美定时执行。每个Line
都有一个监听器,用于注册和取消注册该行的数据流(每个监听器都有 TimerTask)。现在可能发生的情况是,如果我使用 TimerTasks 实现它,则可能会发生在取消注册监听器之前注册监听器的情况,然后取消注册将导致下一个 RecordingSession 中没有记录任何数据。
####### RecordingSession 1 ############### RecordingSession 2 ########
#|********* Line 1 **************|##|********* Line 1 **************|#
# |******** Line 2 ******|## |******** Line 2 ******|# ...
# |**** Line 3 ***|## |**** Line 3 ***|#
######################################################################
有没有比(嵌套)TimerTasks 和线程更好的方法来解决这个问题?
最佳答案
最后我选择了TimerTasks
和调度。每次线路停止时,它都会通知录制 session ,并且一旦不再有任何 Activity 线路(这应该在同一时刻发生在所有线路上),我就会重新安排 RecordingSession
。
关于java - 实现精确的时间相关顺序执行的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15807056/